kst/icshp - 1. přednáška
TRANSCRIPT
![Page 1: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/1.jpg)
Programování v .NET a C#Přednáška 01
![Page 2: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/2.jpg)
Přednáší
Ing. Jan Hřídel
www.hridel.com
V pochvalných i kritických tweetech z přednášky nezapomeňtezmínit @h0nza.
![Page 3: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/3.jpg)
Zápočet
![Page 4: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/4.jpg)
semestrálkavypracovaná 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)
![Page 5: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/5.jpg)
100 %součet teoretický test + docházka
(min. docházka je 25 %, min. z testu 20 %)
![Page 6: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/6.jpg)
Let’s start
![Page 7: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/7.jpg)
8 úrovní programátorů
![Page 8: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/8.jpg)
1. “mrtví” programátořiVáš kód Vás přežije
Dijkstra Knuth Kay
![Page 9: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/9.jpg)
2. úspěšní programátořiSvětově známí a vybudovali úspěšný byznys - the real freedom zero
Carmack Hansson Gates
![Page 10: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/10.jpg)
3. slavní programátoři
Známí v programátorských kruzích.
Slavný je dobrý, ale úspěšný je lepší.
![Page 11: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/11.jpg)
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?
![Page 12: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/12.jpg)
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í.
![Page 13: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/13.jpg)
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ů.
![Page 14: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/14.jpg)
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“.
![Page 15: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/15.jpg)
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ů.
![Page 16: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/16.jpg)
Řiďte se pravidly
![Page 17: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/17.jpg)
Coding horror
![Page 18: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/18.jpg)
pravidlo #1Je to vždy vaše chyba!
https://twitter.com/codinghorror/status/207914921655156736
![Page 20: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/20.jpg)
pravidlo #2Nejlepší kód je “žádný” kód!
Jako softwaroví vývojáři jste svýmvlastní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 == ‘’)
![Page 21: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/21.jpg)
pravidlo #3Komentáře!
Nejen:● co● jak
Ale hlavně:● proč
„To write good comments you have to be a good writer.“
![Page 22: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/22.jpg)
pravidlo #4Dodržujte konvence!
convention over configuration
![Page 23: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/23.jpg)
Pole
![Page 24: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/24.jpg)
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];
![Page 25: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/25.jpg)
Jak velké je pole?
int myArraySize = myArray.Length;
![Page 26: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/26.jpg)
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);
![Page 27: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/27.jpg)
Seřazení pole
![Page 28: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/28.jpg)
OOP
![Page 29: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/29.jpg)
OOP
![Page 30: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/30.jpg)
OOPJeff 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.”
![Page 31: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/31.jpg)
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!
![Page 32: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/32.jpg)
OOP
Jak je to se static?
![Page 33: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/33.jpg)
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.
![Page 34: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/34.jpg)
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ě
![Page 35: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/35.jpg)
Co program vypíše?
![Page 36: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/36.jpg)
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(){}
![Page 37: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/37.jpg)
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.
![Page 38: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/38.jpg)
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.
![Page 39: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/39.jpg)
Konvence pojmenování
![Page 40: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/40.jpg)
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
![Page 41: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/41.jpg)
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
![Page 42: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/42.jpg)
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)
![Page 43: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/43.jpg)
Konvence pojmenování
Více na MSDN - “Guidelines for Names”
● http://goo.gl/179I1
![Page 44: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/44.jpg)
Identifikátory
![Page 45: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/45.jpg)
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.
![Page 46: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/46.jpg)
Proměnné
![Page 47: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/47.jpg)
Deklarace proměnných
● const● volatile
ě
ě
![Page 48: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/48.jpg)
Deklarace proměnných
There are no global variables in C#,
![Page 49: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/49.jpg)
Deklarace proměnných
int i, j = 11, k = 5;
const int m = 10, n = 20;
![Page 50: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/50.jpg)
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.
![Page 51: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/51.jpg)
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.
![Page 52: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/52.jpg)
Jmenné prostory
![Page 53: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/53.jpg)
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.
![Page 54: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/54.jpg)
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ů, …)
![Page 55: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/55.jpg)
Deklarace prostoru jmenZpů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
![Page 56: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/56.jpg)
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
![Page 57: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/57.jpg)
Direktiva using
![Page 58: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/58.jpg)
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.
![Page 59: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/59.jpg)
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“);
![Page 60: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/60.jpg)
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.
![Page 61: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/61.jpg)
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
![Page 62: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/62.jpg)
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;
![Page 63: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/63.jpg)
Operátor ::
![Page 64: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/64.jpg)
Operátor ::
namespace alias qualifier
Používá se ve spojení s klíčovým slovem global nebo ve spojení s aliasem prostoru jmen.
![Page 65: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/65.jpg)
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();
} } }
![Page 66: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/66.jpg)
Struktury
![Page 67: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/67.jpg)
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)
![Page 68: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/68.jpg)
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.
![Page 69: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/69.jpg)
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.
![Page 70: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/70.jpg)
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;
}
}
![Page 71: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/71.jpg)
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?
![Page 72: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/72.jpg)
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
![Page 73: KST/ICSHP - 1. přednáška](https://reader034.vdocuments.mx/reader034/viewer/2022051404/58eeaa851a28abb2318b4577/html5/thumbnails/73.jpg)
“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