Zpět na seznam článků     Zpět na článek

Komentáře ke článku

 
 
 BBCode
spl!te | 81.90.164.*4.6.2013 7:46
Jen tak pro upřesnění: GC funguje tak, že prochází reference od rootu a u každé "si udělá čárku" - tím zjistí, kam se dá dostat a co je mrtvé (reference bez "čárky") No a ty disposne. Provádí se to každou volnou chvilku (což je dobré vědět, proto například "GC.Collect(); nejakydlouhyukol();" ve skutečnosti nevyvolá kolekci mrtvolek před nejakydlouhyukol() - myslím že je tam jakýsi parametr který vyvolá kolekci synchronně či přímo metoda, nevzpomínám si přesně :) )

-----------------------

Co je ale velký problém tohoto článku je právě to NEW... Omg, když mluvíš o OOP a jako příklad uvádíš NEW... To je strašně matoucí.

Zkus si například toto:

Dog pes = new Dog("Hafík");
((Animal)pes).Shout();


Co se stane? Jeje, pejsek nás pozdraví, i když měl značkovat. Což je problém:

Person
{
List<Animal> _pets = new List<Animal>();
public void AddPet(Animal pet)
{
_pets.Add(pet);
}
public void AllPetsShout()
{
foreach(Animal pet in _pets)
pet.Shout();
}
}


V tomhle případě veškerá zvířata budou pouze zdravit (implementace z Animal), ať si pomocí "new" přepíšu metodu jak chci.

Správně by to mělo být virtual/override či dokonce abstract/override. A co třeba sealed? Volání base() v metodě a nejen konstruktoru? :-/

To co uvádíš, má sice NĚKDY smysl, ale z několikaleté profesionální praxe to používáš jen pokud odvozuješ od třídy z .dll u které nemáš přístup k zdrojákům a pak to ještě složitě voláš, jinak si koleduješ o malér (který je naštěstí pěkně vidět na callstacku, ale musíš vědět co hledáš). Ano, jde to, ale je to hnus.

A hlavně neříkej, že ukazuješ jen "začátek OOP", protože tohle je fakt špatný příklad na začátek. Virtual/override je také jednoduché a funguje korektně.
sukovanej | E-mail | Website | ICQ 4274184522.6.2013 12:41
public string Name { get; set; } je pouze zkrácený zápis pro vlastnost (viz úplně konec minulého článku).Odebrat get přímo nemůžeš, ale můžeš u getu napsat private, takže zvenku nebude možno hodnotu vlastnosti vracet.

public string Name { private get; set; }

Doba přístupu se obecně o něco málo liší proto, že do stacku ukládáme typy velké řadově desítky bajtů. Velikost heapu může být klidně několik stovek bajtů.

C moc nedělám, ale co já vím, mělo by to být, jako bys v C napsal:
int* ukazatel = 0;

Přepisování je založeno na dědičnosti a dostaneš úplně novou metodu a přetěžování je v kontextu jedné třídy a dostaneš více možných metod/konstruktorů. V dalším díle budou také vysvětleny ještě virtuální metody, což jsou metody, u kterých se předpokládá, že budou přepsány, tam se používá klíčové slovo override namísto new.

Overloading = liší se v argumentech, ale může být přidána dodatečná logika metody
overriding = vytvoří se úplně nová metoda (různé argumenty, logika, návratový typ)

Pokud neuvedeš new, kompilátor vyhodí varování, ale fungovat to bude.
peto | 213.215.106.*2.6.2013 1:00
V predchadzajucom clanku boli spomenute vlastnosti. V tomto clanku je get a set uvedene priamo v premennej. Je v tomto pripade premenna zaroven vlastnostou? Co ak by som odobral get? Nebola by funcionalita bez oboch slov rovnaka ako s nimi? Ak netrepem, hodnotove typy su alokovane staticky, referencne dynamicky. Zasobnik a hromada sa nachadzaju obe v RAM? Ak ano, preco maju rozdielnu dobu pristupu.

Potvrdit/vyvratit:
Hodnota null je v jazyku C nulovy ukazovatel (cislo 0), t.j. hodnotou referencie (plati aj v C#) nie je adresa alokovanej pamate.

Prepisovanie == pretazovanie (overloading) alebo prekonavanie (overriding)?

Potvrdit/vyvratit:
Overloading = rovnake metody s roznymi argumentmi
Overriding = rovnake metody s roznou navratovou hodnotou (pripadne aj s roznymi argumentmi?)

Co by sa stalo, ak pri "prepisovani" neuvediem new?
sukovanej | E-mail | Website | ICQ 4274184521.6.2013 20:08
Asi takto, ten článek se nezabývá datovými strukturami ale objektovým programováním. Hodnotové proměnné se nejčastěji ukládají do zásobníku a tečka, tak to prostě je - vlastně ani nechápu, co se Ti na té větě nelíbí. Pokud bude chtít čtenář vědět více, může si o tom pořídit literaturu a studovat dále, ale pro tento seriál jako celek je to naprosto nepodstatné.
sachy | 90.177.39.*1.6.2013 19:09
Když tě to netrápí, tak o tom nepiš a ušetříš si ostudu a nezmateš čtenáře.
sukovanej | E-mail | Website | ICQ 4274184521.6.2013 17:50
Já jsem nikde nenapsal, že program přistupuje k datovým prvkům stacku přímo. Napsal jsem, že k samotnému zásobníku má program přímý přístup. Chtěl jsem tím zdůraznit rozdíl mezi heapem, na jehož prvky odkazují reference ve stacku. Jak bude .Net s datovými bloky ve stacku operovat, to už mě nemusí trápit.
sachy | 90.177.39.*1.6.2013 16:35
,,Každá hodnotová proměnná má paměť přidělenou v tzv. zásobníku." WTF?!
K zásobníku se přistupuje sekvenčně (FIFO||LIFO), ale program přistupuje k datům přímo, z čehož plyne že kecáš.

Stránky: 1