SlideShare una empresa de Scribd logo
1 de 52
přednáška 03




Fakulta elektrotechniky a informatiky
Univerzita Pardubice
2012/2013
   Ing. Jan Hřídel (@h0nza)
    ◦ jan.hridel@upce.cz
    ◦ 466 037 178

    ◦ kancelář: 03 012
    ◦ www.hridel.com
@h0nza
   Nejvyšší úroveň
    ◦ Váš kód vás přežije
                     The Art of Commputer
                         Programming            OOP
    No comment ;)
                             TeX
                                            Windowing GUI




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

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




      Carmack                 Hansson        Gates
   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ů
   Ú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?
   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í
   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ů
   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“
   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ů.
Bez rostoucího
nadšení to bude
zas jen rutina a
      práce
   Je to vždy vaše chyba!
   Nejlepší kód je „žádný“ kód!




         http://goo.gl/87XHC
   Nejlepší kód je „žádný“ kód!
    ◦ Jako softwaroví vývojáři jste svým vlastním
      nejhorším nepřítelem.
   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 == “”)
   Komentáře!
    ◦ Ne co
    ◦ Ne jak
    ◦ Ale proč


      „to write good comments you have to be a good writer“
   Dodržujte konvence!
   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
   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
   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)
   Více viz MSDN knihovna a téma
    „Guidelines for Names“




      http://goo.gl/179I1
   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
   Vždy malým písmenem




     http://goo.gl/8Di7A
   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
There are
 NO GLOBAL
variables in C#
   Příklady


    int i, j = 11, k = 5;

    const int m = 10, n = 20;

                     n je také
                    konstanta
   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.
   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
    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 vnořeného prostoru jmen
    ◦ Způsob 1

     namespace Vnější
     {
       namespace Vnitřní
       {
           class X {}
       }
     }
   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
   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
   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.
   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Č?
   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.
   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.
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
   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++
namespace GlobalniProstorJmen
{
     class System { }
     class Program
     {
          static void Main(string[] args)
          {
             System.Console.WriteLine("Text");
             global::System.Console.WriteLine("Text");
             global::System.Console.ReadKey();
         }
    }
}
   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).
   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.
   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.
   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;
    }
}
   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?
   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.
Bod c;
            Nevolá se konstruktor.


c.x = 10;
c.y = 20;        Složky lze inicializovat samostatně



int v = c.x + c.y;
                        OK
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!

Más contenido relacionado

La actualidad más candente

Tv 08
Tv 08Tv 08
Tv 08352
 
Java – Annotations
Java – AnnotationsJava – Annotations
Java – AnnotationsMartin Majlis
 
Tv 09
Tv 09Tv 09
Tv 09352
 
Tv 10 11
Tv 10 11Tv 10 11
Tv 10 11352
 
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
 
Seminar Nastroje Jednotk Testovani
Seminar Nastroje Jednotk TestovaniSeminar Nastroje Jednotk Testovani
Seminar Nastroje Jednotk TestovaniJakub Holy
 
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
 
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
 
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
 
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
 

La actualidad más candente (11)

Tv 08
Tv 08Tv 08
Tv 08
 
Java – Annotations
Java – AnnotationsJava – Annotations
Java – Annotations
 
Tv 09
Tv 09Tv 09
Tv 09
 
Tv 10 11
Tv 10 11Tv 10 11
Tv 10 11
 
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
 
Seminar Nastroje Jednotk Testovani
Seminar Nastroje Jednotk TestovaniSeminar Nastroje Jednotk Testovani
Seminar Nastroje Jednotk Testovani
 
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
 
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é
 
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
 
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čí
 

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

Czjug Zari 2008
Czjug Zari 2008Czjug Zari 2008
Czjug Zari 2008RENESTEIN
 
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
 
.NET v SQL Serveru
.NET v SQL Serveru.NET v SQL Serveru
.NET v SQL ServeruJan Drozen
 
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
 
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Péhápkaři
 
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
 
Před čím vás Nette ani Symfony neochrání
Před čím vás Nette ani Symfony neochráníPřed čím vás Nette ani Symfony neochrání
Před čím vás Nette ani Symfony neochráníFilip Procházka
 
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]Kuba Břečka
 
Zranitelnosti ovladačů jádra Windows v praxi
Zranitelnosti ovladačů jádra Windows v praxiZranitelnosti ovladačů jádra Windows v praxi
Zranitelnosti ovladačů jádra Windows v praxiSecurity Session
 
Zend Framework Coding Standard
Zend Framework Coding StandardZend Framework Coding Standard
Zend Framework Coding StandardOndrej Flidr
 
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
 
Tv 06
Tv 06Tv 06
Tv 06352
 

Similar a Pokročilé techniky programování .NET a C# (15)

Czjug Zari 2008
Czjug Zari 2008Czjug Zari 2008
Czjug Zari 2008
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace
 
Clean code
Clean codeClean code
Clean code
 
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
 
.NET v SQL Serveru
.NET v SQL Serveru.NET v SQL Serveru
.NET v SQL Serveru
 
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
 
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
 
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
 
Před čím vás Nette ani Symfony neochrání
Před čím vás Nette ani Symfony neochráníPřed čím vás Nette ani Symfony neochrání
Před čím vás Nette ani Symfony neochrání
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
 
Zranitelnosti ovladačů jádra Windows v praxi
Zranitelnosti ovladačů jádra Windows v praxiZranitelnosti ovladačů jádra Windows v praxi
Zranitelnosti ovladačů jádra Windows v praxi
 
Zend Framework Coding Standard
Zend Framework Coding StandardZend Framework Coding Standard
Zend Framework Coding Standard
 
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)
 
Tv 06
Tv 06Tv 06
Tv 06
 

Más de Jan Hřídel

Más de 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
 

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

  • 1. přednáška 03 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2012/2013
  • 2. Ing. Jan Hřídel (@h0nza) ◦ jan.hridel@upce.cz ◦ 466 037 178 ◦ kancelář: 03 012 ◦ www.hridel.com
  • 4.
  • 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ů.
  • 13. Bez rostoucího nadšení to bude zas jen rutina a práce
  • 14.
  • 15. Je to vždy vaše chyba!
  • 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“
  • 20. Dodržujte konvence!
  • 21.
  • 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
  • 27. Vždy malým písmenem http://goo.gl/8Di7A
  • 28. 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
  • 29.
  • 30. There are NO GLOBAL variables in C#
  • 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!