Diskuze: Program v OOP
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 18 zpráv z 18.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Ty 3 čísla budeš někde muset uložit, to znamená, že si je v té hlavní metodě normálně necháš a předáš je v parametru té metodě, která už se postará o zbytek.
Takže si napr. deklarujem private premenne a, b, c potom vytvorím konštruktor a v ňom im priradím hodnoty cez Console.ReadLine(); hneď v tomto konštruktore nechám vypočítať diskriminant a korene poprípade to tu aj budem vetviť pre záporný diskriminant potom vytvorím metódu v ktorá bude vracať korene x1 a x1 ako návratovú hodnotu a v hlavnom programe Program.cs tie korene nechám vypísať samozrejme po založení instancie. Mohlo by to tak byť z hľadiska OOP?
Skoro až na to že třída která slouží pro výpočet rovnic nebude
načítat vstup od uživatele. Pouze bude očekávat čísla a je jedno jestli
ji přijdou načtené ze souboru, poslané přes internet nebo načtené z
klávesnice 
Nene. Přece nebudeš vytvářet instanci třídy pokaždé, když budeš
zadávat nové koeficienty, ne? Toto není moc dobrý příklad na oop, resp.
nevidíš v tom tu efektivnost. Jednoduše budeš mít třídu, která bude mít
metodu na vypočítání kvadratické rovnice z koeficientů, které jsou
zadané v parametru té metody, pak si uděláš ještě privátní metodu,
která ti rozdělí ten velký problém na menší -> bude ti vypočítávat
diskriminant. Pak je ještě problém, že kvadratická rovnice má většinou 2
výsledky, to znamená, že je potřebuješ nějak vrátit, takže bych si
udělal nějakou pomocnou třídu, která by měla jen 2 vlastnosti a to x1 a x2

Dobre tak inak skúsim to na niečom jednoduchšom napr. obvod kružnice
mohlo by to vyzerať takto?
Class Kruznica.cs:
namespace Kruznica
{
// Konštruktor
class Kruznica
{
private double obvod;
public Kruznica(double polomer)
{
obvod = 2 * 3.14 * polomer;
}
//Metoda
public double Obvod()
{
return obvod;
}
}
}
Program.cs:
namespace Kruznica
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Zadajte obvod prosím");
Kruznica kObvod = new Kruznica(double.Parse(Console.ReadLine()));
Console.WriteLine("{0}", kObvod.Obvod());
Console.ReadKey();
}
}
}
Nene, ten konstruktor tam vůbec nedávej, to je většinou na nastavení potřebných proměnných dané třídy. Každá ta funkce, by měla být závislá na tom co dostane v parametru.
Představ si, že máš za úkol vytvořit graf závislosti obvodu na poloměru ( u té tvojí kružnice třeba)
Pokaždé, co by jsi chtěl vypočítat ten obvod, by jsi musel vytvořit nový objekt ( to je to = new ...) z hlediska výkonu je to plýtvání, takže by jsi měl jen volat kružnice.ZiskejObvod(double obvod)
http://www.itnetwork.cz/dev-lighter/182 tu jsem něco rychle splácal, jak by to mohlo vypadat
Takže konštruktor vymazať. A ten vzorec v konštruktore presunnú pred
return do metódy Obvod a potom už len na metóde obvod definovať
parameter?
public double Obvod(double polomer)
obvod = 2 * 3.14 * polomer;
return obvod;
Jo, to je přesně ono.
EDIT: Kdyžtak třída Math tam má přímo Pí
ale to je jen takový detail.
A mohlo by to byť aj takto?
class Kruznica
{
private double obvod;
public double polomer;
public double Obvod()
{
obvod = 2 * 3.14 * polomer;
return obvod;
}
}
Na přístup k proměnným třídy máme vlastnosti (get/set) nebo public metody, zase by jsi udržoval zbytečný poloměr a obvod v paměti, který potřebuješ jen když voláš tu metodu Obvod.
Ještě poznámka, na kódy tu máme "Vložit zdrojový kód"
Obvod můžeš udělat jako prázdný atribut a k němu napíšeš getter, který si ten obvod spočítá. Případně i setter.
Z toho vlastne vyplýva, že: 1. Najlepšie je inicializovať premenné cez
parametre metódy.
2. Premenné, alebo parametre sa inicializujú v iba v Program.cs nie v
Class.
3. Premenné, alebo parametre sa v Class iba deklarujú.
Pochopil som to správne?
Akurát si to musím vyjasniť okolo konštruktorov.
Vďaka za tu poznámku.
Ne. Možní to tak spousta vývojářů dělá, ale je to špatně. Konstruktory jsou od toho, aby vytvářený objekt naplnily atributy.
Záleží jak často ten obvod chce, kolik těch kružnic má a jestli se ty
kružnice mění (případně jak často) 
Zkus si tento příklad. Vytvořil jsem kružnici k, nadefinoval jsem její poloměr. Obvod je atribut závislý na poloměru, proto je zbytečné ho mít v objektu. Přesto k němu mohu mít getter i setter.
using System;
class Kruznice {
static void Main(string[] args) {
Kruznice k = new Kruznice();
k.Polomer = 5;
Console.WriteLine(k.Obvod);
k.Obvod = 10;
Console.WriteLine(k.Polomer);
}
public double Polomer{get; set;}
public double Obvod {
get {
return 2 * 3.14 * Polomer;
}
set {
Polomer = value / 2 / 3.14;
}
}
}
Takže len trénovať aby som sa do toho dostal. Veľmi pekne ďakujem všetkým za rady a tŕpezlivosť.
Zobrazeno 18 zpráv z 18.