SlideShare a Scribd company logo
1 of 74
Download to read offline
Programování v .NET a C#
Přednáška 01
Přednáší
Ing. Jan Hřídel
jan.hridel@upce.cz
www.hridel.com
V pochvalných i kritických tweetech z přednášky nezapomeňte
zmínit @h0nza.
Zápočet
semestrálka
vypracovaná a osobně obhájená nejpozději v zápočtovém týdnu
(alespoň jedenkrát konzultována na cvičení v průběhu semestru)
100 %
součet teoretický test + docházka
(min. docházka je 25 %, min. z testu 20 %)
Let’s start
8 úrovní programátorů
1. “mrtví” programátoři
Váš kód Vás přežije
Dijkstra Knuth Kay
2. úspěšní programátoři
Světově známí a vybudovali úspěšný byznys - the real freedom zero
Carmack Hansson Gates
3. slavní programátoři
Známí v programátorských kruzích.
Slavný je dobrý, ale úspěšný je lepší.
4. pracující programátoři
Ú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?
5. průměrní programátoři
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í.
6. amatérští programátoři
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ů.
7. neznámí programátoři
Typický programátor – Honza Kodér.
Obvykle pracuje v rámci velké „anonymní“ společnosti.
Programování je jejich práce, ne „celý jejich život“.
8. špatní programátoři
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ů.
Řiďte se pravidly
Coding horror
pravidlo #1
Je to vždy vaše chyba!
https://twitter.com/codinghorror/status/207914921655156736
pravidlo #2
Nejlepší kód je “žádný” kód!
http://goo.gl/87XHC
pravidlo #2
Nejlepší kód je “žádný” kód!
Jako softwaroví vývojáři jste svým
vlastním nejhorším nepřítelem.
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 == ‘’)
pravidlo #3
Komentáře!
Nejen:
● co
● jak
Ale hlavně:
● proč
„To write good comments you have to be a good
writer.“
pravidlo #4
Dodržujte konvence!
convention over configuration
Pole
Pole
bool[] myArray;
myArray = new bool[15]; // Je to objekt! Skupina 15 prvků.
myArray[4] = true; // 5. prvek je true
// kombinace deklarace a inicializace
bool[] myArray = new bool[15];
Jak velké je pole?
int myArraySize = myArray.Length;
Seřazení pole
double[] someArray = { 4.0, 2.0, double.NaN, 1.0, 5.0 };
foreach (double item in someArray)
Console.WriteLine(item);
Array.Sort(someArray);
foreach (double item in someArray)
Console.WriteLine(item);
Seřazení pole
OOP
OOP
OOP
Jeff Goodell:
“Would you explain, in simple terms, exactly
what object-oriented software is?”
Steve Jobs:
“Objects are like people. They’re living,
breathing things that have knowledge inside
them about how to do things and have memory
inside them so they can remember things. And
rather than interacting with them at a very low
level, you interact with them at a very high level
of abstraction, like we’re doing right here.”
Here’s an example:
If I’m your laundry object, you can give me your dirty clothes and
send me a message that says, “Can you get my clothes laundered,
please.” I happen to know where the best laundry place in San
Francisco is. And I speak English, and I have dollars in my pockets.
So I go out and hail a taxicab and tell the driver to take me to this
place in San Francisco. I go get your clothes laundered, I jump back
in the cab, I get back here. I give you your clean clothes and say,
“Here are your clean clothes.”
“You have no idea how I did that. You have no knowledge of the laundry
place. Maybe you speak French, and you can’t even hail a taxi. You can’t
pay for one, you don’t have dollars in your pocket. Yet, I knew how to do all
of that. And you didn’t have to know any of it. All that complexity was
hidden inside of me, and we were able to interact at a very high level of
abstraction.”
“That’s what objects are. They encapsulate complexity, and the interfaces
to that complexity are high level.”
OOP - síla zapouzdření
Je libo trochu soukromí?
Vaše data mohou být private.
Napište metody, které budou bezpečně přistupovat k datům!
OOP
Jak je to se static?
OOP - konstruktory
Účelem je provést prvotní nastavení, společné pro všechny instance.
Nelze jej přímo zavolat – to proběhne automaticky „někdy těsně před vytvořením
první instance“ nebo před použitím prvního statického členu – okamžik volání
nemá uživatel pod kontrolou.
Co program vypíše?
class MyClass {
public MyClass() {
Console.WriteLine("Instanční konstruktor");
}
static MyClass() {
Console.WriteLine("Statický konstruktor");
}
}
MyClass myClassInstance = new MyClass(); // V Main metodě
Co program vypíše?
OOP - destruktory
Nemohou být definovány ve strukturách.
Třída může mít pouze jeden destruktor.
Destruktory nelze zavolat. Jsou vyvolávány automaticky.
Nemají modifikátory ani parametry.
Syntaxe: ~Trida(){}
OOP - destruktory
V C# objekty odstraňuje automatická správa paměti – okamžik není přesně
determinován.
Garbage Collector – volá periodicky .NET (cca každých 10 ms).
● Běh programu je zastaven.
● Veškerá data, na která nevede odkaz, jsou z paměti odstraněna.
OOP - čistě statické třídy
Obsahují pouze statické členy – nelze vytvořit instanci… přesněji: nemělo by jít
vytvořit instanci.
V .NET se jedná například o třídy Console nebo Math.
Jaké jsou možnosti zamezení vytvoření instance?
● Označit třídu jako static – doporučeno.
● Vytvořit privátní konstruktor.
Konvence pojmenování
Konvence pojmenování
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
Konvence pojmenování
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
Konvence pojmenování - 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)
Konvence pojmenování
Více na MSDN - “Guidelines for Names”
● http://goo.gl/179I1
Identifikátory
Identifikátory
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á slova (http://goo.gl/8Di7A) vždy malým písmenem.
Proměnné
Deklarace proměnných
● const
● volatile
ě
ě
Deklarace
proměnných
There are no global variables in
C#,
Deklarace proměnných
int i, j = 11, k = 5;
const int m = 10, n = 20;
Deklarace proměnných
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.
Deklarace proměnných
Rozdíly oproti C++
Překladač nedovolí použít proměnnou jež nebyla inicilizo-
vána.
Ve vnořeném bloku nelze deklarovat proměnnou stejného
jména jako v bloku nadřezeném.
Jmenné prostory
Prostory jmen
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.
Deklarace prostoru jmen
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ů, …)
Deklarace prostoru jmen
Způsob 1
namespace Vnější
{
namespace Vnitřní {
class X {}
}
}
Způsob 2
namespace Vnější.Vnitřní
{
class X {}
}
Tento způsob v C++ neexistuje.
V obou případech se mimo prostor jmen k X
přistoupí způsobem Vnější.Vnitřní.X
Přístupová práva prostoru jmen
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
Direktiva using
Direktiva using
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.
Direktiva using
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“);
Direktiva using
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.
Direktiva using
using alias = jméno_typu;
Slouží k zadání nového jména pro daný typ.
● alias – nové jméno typu
● jméno_typu – původní označení typu
Direktiva using
using VVX = Vnější.Vnitřní.X;
Nelze přejmenovat klíčové slovo:
using cela = int;
Lze však napsat:
using cela = System.Int32;
Operátor ::
Operátor ::
namespace alias qualifier
Používá se ve spojení s klíčovým slovem global nebo ve
spojení s aliasem prostoru jmen.
Operátor ::
namespace GlobalniProstorJmen {
class System { }
class Program {
static void Main(string[] args) {
System.Console.WriteLine("Text");
global::System.Console.WriteLine("Text");
global::System.Console.ReadKey();
} } }
Struktury
Struktury
V C# je rozdíl mezi strukturami a třídami o poznání větší než v C++.
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)
Rozdíly struktury vs. třídy
● 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.
Rozdíly struktury vs. třídy
● 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.
Struktury - 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;
}
}
Struktury - 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?
Struktury - vytvoření instance
Bod c;
c.x = 10;
c.y = 20;
int v = c.x + c.y;
<= Nevolá se konstruktor.
<= Složky lze inicializovat samostatně
<= OK
“Think about your users and their needs
before you start building the code, and they
will be happy with the final product once
you are done!”
- Andrew Stellman, Jennifer Greene
Thanks!
Ing. Jan Hřídel
@h0nza
jan.hridel@upce.cz
www.hridel.com

More Related Content

What's hot

Java – Annotations
Java – AnnotationsJava – Annotations
Java – AnnotationsMartin Majlis
 
Tv 08
Tv 08Tv 08
Tv 08352
 
Tv 10 11
Tv 10 11Tv 10 11
Tv 10 11352
 
Tv 09
Tv 09Tv 09
Tv 09352
 
Tv 07
Tv 07Tv 07
Tv 07352
 
Zend_Db a Zend_Db_Adapter
Zend_Db a Zend_Db_AdapterZend_Db a Zend_Db_Adapter
Zend_Db a Zend_Db_AdapterOndrej Flidr
 
Zend_Db_Statement a Zend_Db_Profiler
Zend_Db_Statement a Zend_Db_ProfilerZend_Db_Statement a Zend_Db_Profiler
Zend_Db_Statement a Zend_Db_ProfilerOndrej Flidr
 
Seminar Nastroje Jednotk Testovani
Seminar Nastroje Jednotk TestovaniSeminar Nastroje Jednotk Testovani
Seminar Nastroje Jednotk TestovaniJakub Holy
 
Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015
Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015
Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015angular-cz
 

What's hot (9)

Java – Annotations
Java – AnnotationsJava – Annotations
Java – Annotations
 
Tv 08
Tv 08Tv 08
Tv 08
 
Tv 10 11
Tv 10 11Tv 10 11
Tv 10 11
 
Tv 09
Tv 09Tv 09
Tv 09
 
Tv 07
Tv 07Tv 07
Tv 07
 
Zend_Db a Zend_Db_Adapter
Zend_Db a Zend_Db_AdapterZend_Db a Zend_Db_Adapter
Zend_Db a Zend_Db_Adapter
 
Zend_Db_Statement a Zend_Db_Profiler
Zend_Db_Statement a Zend_Db_ProfilerZend_Db_Statement a Zend_Db_Profiler
Zend_Db_Statement a Zend_Db_Profiler
 
Seminar Nastroje Jednotk Testovani
Seminar Nastroje Jednotk TestovaniSeminar Nastroje Jednotk Testovani
Seminar Nastroje Jednotk Testovani
 
Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015
Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015
Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015
 

Similar to KST/ICSHP - 1. přednáška

Strojové učení z rychlíku
Strojové učení z rychlíkuStrojové učení z rychlíku
Strojové učení z rychlíkumichalillich
 
Dependency injection
Dependency injectionDependency injection
Dependency injectionJiří Matula
 
Czjug Zari 2008
Czjug Zari 2008Czjug Zari 2008
Czjug Zari 2008RENESTEIN
 
Borek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webBorek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webDevelcz
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)almadcz
 
Závislosti, injekce a vůbec
Závislosti, injekce a vůbecZávislosti, injekce a vůbec
Závislosti, injekce a vůbecDavid Grudl
 
Úvod do analýzy - 2 část
Úvod do analýzy -  2 částÚvod do analýzy -  2 část
Úvod do analýzy - 2 částMartin Paták
 
Usnadněte si soužití s Doctrine
Usnadněte si soužití s DoctrineUsnadněte si soužití s Doctrine
Usnadněte si soužití s DoctrineFilip Procházka
 
ORM Designer: Speed up your ORM development
ORM Designer: Speed up your ORM developmentORM Designer: Speed up your ORM development
ORM Designer: Speed up your ORM developmentBrnoPHP
 
Doctrine: co dělat, když entity nestačí
Doctrine: co dělat, když entity nestačíDoctrine: co dělat, když entity nestačí
Doctrine: co dělat, když entity nestačíFilip Procházka
 
Vybrané předměty vyučované KIZI pro studenty informatických oborů FIS VŠE
Vybrané předměty vyučované KIZI pro studenty informatických oborů FIS VŠEVybrané předměty vyučované KIZI pro studenty informatických oborů FIS VŠE
Vybrané předměty vyučované KIZI pro studenty informatických oborů FIS VŠEStanislav Vojíř
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace Jan Hřídel
 
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve SwiftuJan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftumdevtalk
 
Karel Minařík: Do nitra stroje s programovacím jazykem Ruby
Karel Minařík: Do nitra stroje s programovacím jazykem Ruby Karel Minařík: Do nitra stroje s programovacím jazykem Ruby
Karel Minařík: Do nitra stroje s programovacím jazykem Ruby ÚISK FF UK
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Railsigloonet
 
Dark Side of iOS [mDevCamp 2013]
Dark Side of iOS [mDevCamp 2013]Dark Side of iOS [mDevCamp 2013]
Dark Side of iOS [mDevCamp 2013]Kuba Břečka
 
TPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročnéTPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročnéRené Stein
 
Urychlovače vývojářova profesního růstu
Urychlovače vývojářova profesního růstuUrychlovače vývojářova profesního růstu
Urychlovače vývojářova profesního růsturdresler
 
Jak rozpoznat hodnotné informace
Jak rozpoznat hodnotné informaceJak rozpoznat hodnotné informace
Jak rozpoznat hodnotné informaceMartin Paták
 

Similar to KST/ICSHP - 1. přednáška (20)

Strojové učení z rychlíku
Strojové učení z rychlíkuStrojové učení z rychlíku
Strojové učení z rychlíku
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Czjug Zari 2008
Czjug Zari 2008Czjug Zari 2008
Czjug Zari 2008
 
Borek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webBorek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro web
 
P2021
P2021P2021
P2021
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)
 
Závislosti, injekce a vůbec
Závislosti, injekce a vůbecZávislosti, injekce a vůbec
Závislosti, injekce a vůbec
 
Úvod do analýzy - 2 část
Úvod do analýzy -  2 částÚvod do analýzy -  2 část
Úvod do analýzy - 2 část
 
Usnadněte si soužití s Doctrine
Usnadněte si soužití s DoctrineUsnadněte si soužití s Doctrine
Usnadněte si soužití s Doctrine
 
ORM Designer: Speed up your ORM development
ORM Designer: Speed up your ORM developmentORM Designer: Speed up your ORM development
ORM Designer: Speed up your ORM development
 
Doctrine: co dělat, když entity nestačí
Doctrine: co dělat, když entity nestačíDoctrine: co dělat, když entity nestačí
Doctrine: co dělat, když entity nestačí
 
Vybrané předměty vyučované KIZI pro studenty informatických oborů FIS VŠE
Vybrané předměty vyučované KIZI pro studenty informatických oborů FIS VŠEVybrané předměty vyučované KIZI pro studenty informatických oborů FIS VŠE
Vybrané předměty vyučované KIZI pro studenty informatických oborů FIS VŠE
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace
 
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve SwiftuJan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
 
Karel Minařík: Do nitra stroje s programovacím jazykem Ruby
Karel Minařík: Do nitra stroje s programovacím jazykem Ruby Karel Minařík: Do nitra stroje s programovacím jazykem Ruby
Karel Minařík: Do nitra stroje s programovacím jazykem Ruby
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Rails
 
Dark Side of iOS [mDevCamp 2013]
Dark Side of iOS [mDevCamp 2013]Dark Side of iOS [mDevCamp 2013]
Dark Side of iOS [mDevCamp 2013]
 
TPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročnéTPL - konkurenční, paralelní a asynchronní kód pro náročné
TPL - konkurenční, paralelní a asynchronní kód pro náročné
 
Urychlovače vývojářova profesního růstu
Urychlovače vývojářova profesního růstuUrychlovače vývojářova profesního růstu
Urychlovače vývojářova profesního růstu
 
Jak rozpoznat hodnotné informace
Jak rozpoznat hodnotné informaceJak rozpoznat hodnotné informace
Jak rozpoznat hodnotné informace
 

More from Jan Hřídel

More from Jan Hřídel (9)

C# - Vícevláknové aplikace
C# - Vícevláknové aplikaceC# - Vícevláknové aplikace
C# - Vícevláknové aplikace
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
INPTP wpf
INPTP   wpfINPTP   wpf
INPTP wpf
 
Aplikační nastavení v .NET
Aplikační nastavení v .NETAplikační nastavení v .NET
Aplikační nastavení v .NET
 
ADO.NET
ADO.NETADO.NET
ADO.NET
 
INPTP přednáška 01a 2016
INPTP přednáška 01a 2016INPTP přednáška 01a 2016
INPTP přednáška 01a 2016
 
Startup investor pitch
Startup investor pitchStartup investor pitch
Startup investor pitch
 
Nástěnka 01
Nástěnka 01Nástěnka 01
Nástěnka 01
 
Nástěnka 02
Nástěnka 02Nástěnka 02
Nástěnka 02
 

KST/ICSHP - 1. přednáška

  • 1. Programování v .NET a C# Přednáška 01
  • 2. Přednáší Ing. Jan Hřídel jan.hridel@upce.cz www.hridel.com V pochvalných i kritických tweetech z přednášky nezapomeňte zmínit @h0nza.
  • 4. semestrálka vypracovaná a osobně obhájená nejpozději v zápočtovém týdnu (alespoň jedenkrát konzultována na cvičení v průběhu semestru)
  • 5. 100 % součet teoretický test + docházka (min. docházka je 25 %, min. z testu 20 %)
  • 8. 1. “mrtví” programátoři Váš kód Vás přežije Dijkstra Knuth Kay
  • 9. 2. úspěšní programátoři Světově známí a vybudovali úspěšný byznys - the real freedom zero Carmack Hansson Gates
  • 10. 3. slavní programátoři Známí v programátorských kruzích. Slavný je dobrý, ale úspěšný je lepší.
  • 11. 4. pracující programátoři Ú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?
  • 12. 5. průměrní programátoři 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í.
  • 13. 6. amatérští programátoři 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ů.
  • 14. 7. neznámí programátoři Typický programátor – Honza Kodér. Obvykle pracuje v rámci velké „anonymní“ společnosti. Programování je jejich práce, ne „celý jejich život“.
  • 15. 8. špatní programátoři 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ů.
  • 18. pravidlo #1 Je to vždy vaše chyba! https://twitter.com/codinghorror/status/207914921655156736
  • 19. pravidlo #2 Nejlepší kód je “žádný” kód! http://goo.gl/87XHC
  • 20. pravidlo #2 Nejlepší kód je “žádný” kód! Jako softwaroví vývojáři jste svým vlastním nejhorším nepřítelem. 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 == ‘’)
  • 21. pravidlo #3 Komentáře! Nejen: ● co ● jak Ale hlavně: ● proč „To write good comments you have to be a good writer.“
  • 23. Pole
  • 24. Pole bool[] myArray; myArray = new bool[15]; // Je to objekt! Skupina 15 prvků. myArray[4] = true; // 5. prvek je true // kombinace deklarace a inicializace bool[] myArray = new bool[15];
  • 25. Jak velké je pole? int myArraySize = myArray.Length;
  • 26. Seřazení pole double[] someArray = { 4.0, 2.0, double.NaN, 1.0, 5.0 }; foreach (double item in someArray) Console.WriteLine(item); Array.Sort(someArray); foreach (double item in someArray) Console.WriteLine(item);
  • 28. OOP
  • 29. OOP
  • 30. OOP Jeff Goodell: “Would you explain, in simple terms, exactly what object-oriented software is?” Steve Jobs: “Objects are like people. They’re living, breathing things that have knowledge inside them about how to do things and have memory inside them so they can remember things. And rather than interacting with them at a very low level, you interact with them at a very high level of abstraction, like we’re doing right here.” Here’s an example: If I’m your laundry object, you can give me your dirty clothes and send me a message that says, “Can you get my clothes laundered, please.” I happen to know where the best laundry place in San Francisco is. And I speak English, and I have dollars in my pockets. So I go out and hail a taxicab and tell the driver to take me to this place in San Francisco. I go get your clothes laundered, I jump back in the cab, I get back here. I give you your clean clothes and say, “Here are your clean clothes.” “You have no idea how I did that. You have no knowledge of the laundry place. Maybe you speak French, and you can’t even hail a taxi. You can’t pay for one, you don’t have dollars in your pocket. Yet, I knew how to do all of that. And you didn’t have to know any of it. All that complexity was hidden inside of me, and we were able to interact at a very high level of abstraction.” “That’s what objects are. They encapsulate complexity, and the interfaces to that complexity are high level.”
  • 31. OOP - síla zapouzdření Je libo trochu soukromí? Vaše data mohou být private. Napište metody, které budou bezpečně přistupovat k datům!
  • 32. OOP Jak je to se static?
  • 33. OOP - konstruktory Účelem je provést prvotní nastavení, společné pro všechny instance. Nelze jej přímo zavolat – to proběhne automaticky „někdy těsně před vytvořením první instance“ nebo před použitím prvního statického členu – okamžik volání nemá uživatel pod kontrolou.
  • 34. Co program vypíše? class MyClass { public MyClass() { Console.WriteLine("Instanční konstruktor"); } static MyClass() { Console.WriteLine("Statický konstruktor"); } } MyClass myClassInstance = new MyClass(); // V Main metodě
  • 36. OOP - destruktory Nemohou být definovány ve strukturách. Třída může mít pouze jeden destruktor. Destruktory nelze zavolat. Jsou vyvolávány automaticky. Nemají modifikátory ani parametry. Syntaxe: ~Trida(){}
  • 37. OOP - destruktory V C# objekty odstraňuje automatická správa paměti – okamžik není přesně determinován. Garbage Collector – volá periodicky .NET (cca každých 10 ms). ● Běh programu je zastaven. ● Veškerá data, na která nevede odkaz, jsou z paměti odstraněna.
  • 38. OOP - čistě statické třídy Obsahují pouze statické členy – nelze vytvořit instanci… přesněji: nemělo by jít vytvořit instanci. V .NET se jedná například o třídy Console nebo Math. Jaké jsou možnosti zamezení vytvoření instance? ● Označit třídu jako static – doporučeno. ● Vytvořit privátní konstruktor.
  • 40. Konvence pojmenování 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
  • 41. Konvence pojmenování 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
  • 42. Konvence pojmenování - 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)
  • 43. Konvence pojmenování Více na MSDN - “Guidelines for Names” ● http://goo.gl/179I1
  • 45. Identifikátory 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á slova (http://goo.gl/8Di7A) vždy malým písmenem.
  • 48. Deklarace proměnných There are no global variables in C#,
  • 49. Deklarace proměnných int i, j = 11, k = 5; const int m = 10, n = 20;
  • 50. Deklarace proměnných 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.
  • 51. Deklarace proměnných Rozdíly oproti C++ Překladač nedovolí použít proměnnou jež nebyla inicilizo- vána. Ve vnořeném bloku nelze deklarovat proměnnou stejného jména jako v bloku nadřezeném.
  • 53. Prostory jmen 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.
  • 54. Deklarace prostoru jmen 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ů, …)
  • 55. Deklarace prostoru jmen Způsob 1 namespace Vnější { namespace Vnitřní { class X {} } } Způsob 2 namespace Vnější.Vnitřní { class X {} } Tento způsob v C++ neexistuje. V obou případech se mimo prostor jmen k X přistoupí způsobem Vnější.Vnitřní.X
  • 56. Přístupová práva prostoru jmen 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
  • 58. Direktiva using 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.
  • 59. Direktiva using 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“);
  • 60. Direktiva using 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.
  • 61. Direktiva using using alias = jméno_typu; Slouží k zadání nového jména pro daný typ. ● alias – nové jméno typu ● jméno_typu – původní označení typu
  • 62. Direktiva using using VVX = Vnější.Vnitřní.X; Nelze přejmenovat klíčové slovo: using cela = int; Lze však napsat: using cela = System.Int32;
  • 64. Operátor :: namespace alias qualifier Používá se ve spojení s klíčovým slovem global nebo ve spojení s aliasem prostoru jmen.
  • 65. Operátor :: namespace GlobalniProstorJmen { class System { } class Program { static void Main(string[] args) { System.Console.WriteLine("Text"); global::System.Console.WriteLine("Text"); global::System.Console.ReadKey(); } } }
  • 67. Struktury V C# je rozdíl mezi strukturami a třídami o poznání větší než v C++. 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)
  • 68. Rozdíly struktury vs. třídy ● 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.
  • 69. Rozdíly struktury vs. třídy ● 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.
  • 70. Struktury - 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; } }
  • 71. Struktury - 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?
  • 72. Struktury - vytvoření instance Bod c; c.x = 10; c.y = 20; int v = c.x + c.y; <= Nevolá se konstruktor. <= Složky lze inicializovat samostatně <= OK
  • 73. “Think about your users and their needs before you start building the code, and they will be happy with the final product once you are done!” - Andrew Stellman, Jennifer Greene