Zdravím před pár dny jsem si pořídil knihu "C# pro zelenáče" a rozhodl jsem se že se začnu pilně učit :) Jenže hned mam problém, na začátku knihy je povídání o základech OOP, je to prostě nechápu tak jsem to přeskočil a teď když s etam popisuje vytvoření vlastní knihovny pro std. vstup tak jsem uplně v háji, i před tím tam pořád mluví o tom a já vím houby :/ Proto sem se vás chtěl zeptat zda nevíte/neporadíte nejakou radu/návod jelikož já nechápu - Závislost mezi třídou, objektem, metoudou ( a pořád nejak nemůžu pochopit co, co je :( ) to je všechno prosím o nejaké rady, nemůžu se hnout z místa a dost mně to štve jelikož mně to baví :)
Všem předem moc díky
Fórum › .NET
Začátečník - názvosloví ...
Čoveče, tu knížku jsem v začátcích také četl a přišla mi velmi srozumitelná a styl psaní pane Viriuse naprosto bezkonkurenční, lepší literaturu těžko doporučit. Opravdu se k těm pojmům ještě jednou vrať a zkus to znovu.
Pro začátečníka v OOP a C# může být ovšem matoucí, že v .NET existuje třída jménem Object. :) Tím se nenech zaskočit. :)
To gatuso : Zkus si to přečíst znovu (třeba i jinde) a ty návaznosti mezi jednotlivými pojmy si nakresli (nebo si je zkus představit). Díky vlastní vizualizaci si můžeš takový pojmy lépe ujasnit.
Jo, u Viria (nebo asi Viriuse) jsem taky začínal, z těch pojmů si nic nedělej, časem ti to přejde do krve. Zkus to vážně proložit i jinými materiály, pomůže to.
Zkusíme příklad z tvého okolí (zase :smile1: ) ...
Řekněme, že bydlíš v domku. Od toho domku jsou plány, podle kterých se ten dům postavil. Plán je "jen" kus papíru a bydlet se v něm nedá. Ty plány, to je třída. Je to předpis, šablona ... jak chceš.
Podle toho plánu postavíš dům. Ten dům to je objekt. Instance objektu dané třídy (dům postavený podle plánu). Instance tvého domu by se jmenovala třeba gatusoHouse. Kdyby si bydlel v satelitním městečku, kde je jeden domek jako druhý, tak by celé to satelitní městečko bylo jedna instance objektu této třídy vedle druhé.
Takový dům má plno atributů (datový členů). Má například zvonek. Ke zvonku se nepřistupuje přímo (když chceš zazvonit, tak většinou nevlezeš do domu až ke zvonku), ale přes tlačítko (přes metodu Zazvonit). Aby tě mohl navštívit kdokoliv, tak musí mít možnost Zazvonit, tj. tato metoda musí být veřejně dostupná (public).
Dům má dále třeba okna. Okna lze otvírat a zavírat. Opět by si udělal metody pro přístup k oknům (ZavřiOkno, OtevřiOkno). Kdyby byly tyto metody veřejné, tak by je mohl otevřít kdokoliv, kdo by šel kolem, tj. za chvilku by ti někdo vykradl :smile1: . Takže tyto metody nemohou být veřejné, ale musí být dostupné pouze z domu, musí být soukromé (private).
Dědění se na tom asi vysvětlit nedá, ale to až jindy.
No ja to zkousel i z jinych publikaci ale tam je tzo napsany jeste slozitejs :/ ....
To liborb : Dík že si mi to takle rozepsal ... ale já to stále nechápu myslím si že by pro mně bylo uplně nejlepší (i pro kolegy co začínaj taky s C# a maj podobnej problem) kdyby jsi napsal nejakej jednoduchej kod (zadny sloizitosti aby jsem pochopily vis co :) ) kde by bylo vic obejktu, trid atd. a popsal mne tam komenty protoze mne to stale nejak nedochazi, sice si myslite "tak se na programovani vys**r kdyz to nechapes" ale ja se to proste chci naucit protoze mne to bavi :) (a jeste k tomu mne prijaly na IT skolu takze se moc tesim) moc tě tedy Liborb prosím jestly bys mně to nenapsal :) díky moc ! :)
Ahoj,
zkusím ze sebe dostat pár vět, který by to mohly usnadnit :)
Třídu (class) můžeš běžně chápat jako určitý předpis (šablonu, ..) sloužící k vytvoření objektu. Z pohledu objektového modelování to můžeš chápat také jako skupinu podobných (nikoliv stejných) objektů.
// Třída s názvem Pes. Předpis sloužící k vytváření instancí (resp. psů) s určitým jménem.
public class Pes
{
// Atribut objektu (field) - slouží k uchování nějaké informace o objektu.
// Většina pravidel říká, že by jim měl vždy předcházet modifikátor private.
// Pokud chceš atribut zpřístupnit zvenku, měl bys k tomu využít vlastnost
// (property) nebo metodu (method).
// Atributům je implicitně přiřazena výchozí hodnota.
private string name;
// Konstruktor objektu - slouží k vytvoření instance, tedy konkrétního objektu
// s konkrétními vlastnostmi, na jejichž základě lze daný objekt identifikovat.
// Pokud není definován žádný konstruktor, využívá se implicitní konstruktor
// bez parametrů.
public Pes(string name)
{
// Přiřazení hodnoty parametru do proměnné (atributu).
// Lokální proměnné (variables) / parametry a atributy se stejným
// názvem se rozlišují s pomocí slovíčka this.
this.name = name;
}
// Vlastnost objektu, obvykle slouží pro zpřístupnění soukromých atributů.
// Doporučuji vždy implementovat blok get, který slouží pro čtení a v
// případě potřeby také blok set, který slouží k modifikaci atributu, apod.
// U vlastností se obecně předpokládá, že neobsahují žádnou komplikovanou
// logiku - pokud by k tomu mělo dojít, je lepší použít metodu.
public string Name
{
get { return this.name; }
set { this.name = value; }
}
// Metoda objektu - říká objektu, že má něco udělat. Je to stejné,
// jako když "řekneš" autu jeď, psovi štěkej, telefonu zavolej na
// číslo 112, apod. Klíčové slovo void na začátku značí, že
// metoda nemá žádnou návratovou hodnotu (nevrací výsledek, apod).
public void SomeUsefulMethod()
{
// Lokální proměnná (variable), implicitně nemá žádnou hodnotu.
// Musíš jí ve vhodnou chvíli nějakou přiřadit, jinak s ní nemůžeš pracovat.
int number = 25;
}
}
Objekt pak reprezentuje konkrétní instance třídy (vytvořenou zavoláním konstruktoru), kterou lze, jak už jsem psal, identifikovat na základě konkrétních vlastností. Následující kód ukazuje vytvoření několik objektů (resp. psů), které lze jednoznačně identifikovat na základě jména.
Pes pes = new Pes("gatuso");
Pes pes2 = new Pes("liborb");
Pes pes3 = new Pes("djanosik");
Pes pes4 = new Pes("Chrasty");
Víc mě aktuálně nenapadá, kdyžtak se ptej dál.
BTW: Třída může mít také statické / třídní členy, které jsou společné pro všechny její instance, ale tím jsem to nechtěl komplikovat.
To djanosik : Hele dík za vysvetleni (urcite sis stim dal hodne prace) ale prece jenom jsem to nepochopil, za prvi - jsem nezkusenej amater (takže 90% tech slov (nazvu) nerozumim) a za druhy mne uplne mate jak tam do toho pletes i ty jiny veci, ja potrebuji jen vysvtelit (nejlepe kod s prikladem ze zivota jak sem psal) co to je Třída, obekt, atd. a jaká je mezi nima souvislost + co znamenaj (neboli k cemu je pouzivat a k cemu mi co je dobry a co ne) Já už nevím jak vám to napsat aby jste mi napsaly a ja to pochopil, vy mi pisete vzdy tak odborne ze se mi to jeste vic zamota, spis to napis uplne pro deti ze skolky :D myslim ze tak to pochopim lip :) Predpokladam ze se na mne uz asi vykasles takže díky moc DjJanosik ;) pokud bys mne napsal jak sem ted napsal tak to mnohokrat dik snad uz bych to mel pochopit :(
Tak taky něco řeknu, co nejkratší a nejjednodušší:) Třída je šablona, podle které se tvoří objekty. Objekt vytvořený podle třídy X je jinými slovy "instance třídy X".
A příklad? To napsal už Dušan, ale tak teda z jeho kódu vytáhnu to, co se týká toho, co jsem teď napsal. První kód je kód samotné třídy:
public class Pes
{
}
A takhle vypadá vytvoření instance té třídy:
Pes prvniPes = new Pes();
To gatuso : Já nevím, jak jinak bych to mohl napsat, nejsem si až tak jistý, že by příklad z praxe přinesl větší užitek (zkusím něco jednoduchého najít). Pro děti ze školky to IMHO napsal liborb (), ale je pravda, že tam stejně jako já připletl v danou chvíli nepodstatné věci. Sedni si k tomu a postupně si to celé zkus přeložit do své "vnitřní řeči", pak si někam napiš, co konkrétně ti není jasný (ne obecně jako teď).
Použil jsem jen běžný a lehce dohledatelný výrazy, ale pokud ti něco není jasný, rád to vysvětlím, ale opět musíš být konkrétní.
To Chrasty : Jen doplním, že to co se jmenuje Pes je třída a to, co se jmenuje prvniPes je objekt.
Takže chlapy, jelikož jsem zmatenej a nemělo by cenu vypisovat kousky co jeste bych potreboval poradit nebo ne, napisu ted jasne co nechapu a co bych chtel vysvetlit (kdyztak mne serverte ze uz to tu je protoze sem fakt mimo :D ) Jak sem říkal kdyby jste mi to vysvětlily jako LiborB na nejakym příkladu ze života on použil barák ale nejak stručneji by to chtwlo hlavne ne ty odborny nazvy ale normalne nejak :D
Takže:
Když kouknu na základní kód
// co je toto ? Jmeny prostor ? nutnost vedet co to je pro uplneho amatera nejspis
// ne takze zatim nepotrebuji vedet.
namespace Priklad
{
// třída - co ve třídě píšu sem píšu všechny metody? (jen?) nebo i neco jineho?
// k cemu vubec slouzi trida? to je takovy jakoby "zmelovac programu? "
class Program
{
// metoda ? v ni pisu kod ? kdyz mam vice metod jaka je mezi nima spojitost ?
static void Main(string[] args)
{
} //konec metody
} //konec třídy
}
To nechápu tedy proč mi vysvetlujete dalsich 10 výrazů, na co jsou ? proste to nechapu ! :(
Neni neco na cem bych se naucil tydle zaklady nejakej jazyk ? Nechci vas tady porad otravovat a psat dokola ze nechapu, jak tak koukam to asi nepochopim bo ja nwm :/ mozna bych to chapal ale proste kdyz tady rikate vyrazi typu : trida, objekt, Atribut objektu, Konstruktor objektu, implementovat atd. tak sem proste mimo, ja nikdy takovydle slova neslysel takze nwm no ... treba C++ jakoby zaklady (if, promeny, funkce, while....) tak tam se vubec todle nemusi delat, este k tomu jak mam tu knizku tam pise ze je pro lidi co nikdy neprogramovaly a hned tam na mne soly tydle blby pojmy a buvi co jeste, to je teda pro zelenace co nikdy neprogramovaly fakt vyborny ...
no nemyslim ze by melo jeste cenu se snazit.. ale z realneho zivota:
trida - by byly napriklad stavebni plany nejakeho domu (alias objektu)
objekt - je jiz postaveny dum podle nejake tridy (stavebnich planu)
dedicnost - objekt prejima dulezite prvky od rodice
tj. treba trida dum -> od ni odvozena trida cihlovy dum a tak dale
trida samozrejme definuje takzvane rozhrani.. napriklad pripojka plynu, vody, elektriny, vstupni dvere, garaze, komin...
je to vesmes vse co ma za ukol interakci s okolim
metody maji za ukol s objektem nejak manipulovat .. (na to uz se ale pro vysvetleni barak primo nehodi)
dejme tomu otevri garaz nebo vypni/zapni proud/vodu/plyn....
To gatuso : Ty věci navíc jsem napsal, protože je považuju za důležitý. Ty teď třeba ne, to chápu, tak si je odmysli :) Ty neznámý pojmy ... v názvu vlákna jsi zmínil názvosloví, tak to bude asi ono. Chceš něco z toho objasnit? Teď k tomu kódu.
namespace Priklad // Ano, potřebuješ to vědět. :)
{
// Jak už bylo řečeno, třída definuje vlastnosti objektu, jeho podobu,
// a také slouží k vytváření objektů. Do třídy můžeš dát hromadu věcí (metody,
// vlastnosti, události, viz. příklad nahoře). Co by měl být "zmelovac programu"?
class Program
{
// Ano, metody obsahují většinu kódu. Spojitost? Jak to myslíš?
static void Main(string[] args)
{
}
}
}
BTW: Na většinu otázek už zde byla odpověď a ne jedna. Mám takový pocit, že sis je pořádně nepřečetl a nebo nad nimi přemýšlíš bez jakékoliv abstrakce. Neměl bys s tím mít problém. Další věc je, že se ptáš na věci, který skutečně nepotřebuješ coby absolutní začátečník vědět (někdo mě za to tvrzení asi kopne), ono to přijde časem, až si s tím kódem začneš trochu hrát.
Mě se zdá že pořád jen hledáš místo kam budeš psát kód (prostě u C++ ti řekli že máš všechno napsat do části která je ohraničená z jedný strany int main(){ a z druhý strany } , tak to prostě děláš aniž by jsi přemýšlel o tom co vlastně děláš). Přítom až do OOP pronikneš tak zjistíš že je to přirozenější než cokoliv jinýho.
Rekapitulace toho co jsem ti buď já (přes ICQ) nebo ostatní tady napsaly:
[seznam]Namespace(jmenný prostor) je v podstatě taková krabice na výkresy(třídy).
Třída je výkres podle kterýho vytvářím objekty(něco co je, entita, věc).
Atributy jsou data který náležejí tomu kterému objektu.
Metody jsou funkce který pařej k objektu. Jakou mají mezi sebou spojitost? Nechápu...
[/seznam]
Ahoj, tak jsem si to úspěšně pročetl až sem.
Jak již bylo řečeno - příklady "ze života " tu máš, trochu důležitého názvosloví taky. Proto bych doporučoval si to pořádně přečíst, klidně dvakrát.
Jsem taky skoro absolutní začátečník a věř mi (nebo nevěř), že pánové ti to popsali opravdu nejjednodušeji jak je snad možné. Prostě to přijmi jako fakta.
Znám ten pocit, který si tu popsal, udělal jsem "chybu", že jsem jako svou první knihu přečetl MS VS C# 2005 krok za krokem. Také knížka, určená pro začátečníky (alespoň jsem si to myslel), kde ovšem slova "implementace, instance, literál, identifikátor, argument, postfix/prefix" a spousty dalších, bral autor jako samozřejmost a opravdu se s nimi moc nepáral. Několikrát jsem to vážně chtěl zabalit, topil jsem se :o) .. Nakonec jsem to přelouskal a zjistil, že jsou i opravdové knížky pro začátečníky.
Doporučil bych ti následující:
OOP bez předchozích znalostí - http://knihy.cpress.cz/knihy/pocitacova-literatura/bez-predchozich-znalosti/oop-objektove-orientovane-programovani-bez-predchozich-znalosti-pruvodce-pro-samouky/
dále pak Visual C# 2005 bez předchozích znalostí (kterou právě dočítám a lituji, že jsem s ní nezačínal) - http://knihy.cpress.cz/knihy/pocitacova-literatura/bez-predchozich-znalosti/visual-c-2005-bez-predchozich-znalosti-pruvodce-pro-samouky/.
Obě by se měly dát vypůjčit v knihovnách, jinak cena není tak hrozná. Každopádně opravdu "lidská řeč", všechno vysvětleno na srozumitelných příkladech atd...
Jinak, jen taková poznámka - nevím, jestli se to zdá jen mně, ale řekl bych, že se trošičku bráníš vstřebávání informací. Přitom ale nemáš problém s jejich získáváním.. Chci říct - víc čti odpovědi a zamysli se, než se znovu zeptáš.. Nic ve zlém samozřemě ;o)
Zdar
dobrý ranko chlapy, tak mně to nedalo a přečetl jsem si to znova jeste jednou. Možná se budete smat ale udelal jsem si takovej obrazek
mohly by jste mi tedy rict zda uz to chapu spravne ? :)Odpoledne si udelam podle toho obrazku kod, abych to chapal v praxi (ale pokud to mam tedy sorvane toto co jsem nakreslil v malovani :D )
Všem jeste jednou moc děkuju že mate trpelivost semnou :)
Jinak Hoffiku muzu se zeptat ta kniha Visual c# ... to je jen o grafickem prostredi asi ze ? Je nutnost znat zaklady C# nebo jiny jazyk ? (ja takove zkusenjosti prave jeste nemam ) dík za odpoved
Gatuso
V podstatě to chápeš dobře ... jenom drobnost ... data jsou součástí objektu, to je podstata objektů. Odpovědí je tu dost, takže alespoň slíbený kus kódu:
// planek domku (trida Domek)
class Domek
{
// dato/vlastnost/atribut zvonek
private bool zvonek;
// dato/vlastnost/atribut okno
private bool okno;
// verejne pristupna metoda Zazvon
public void Zazvon()
{
zvonek = true;
}
// soukroma metoda na otevreni okna
private void OtevriOkno()
{
okno = true;
}
// soukroma metoda na zavreni okna
private void ZavriOkno()
{
okno = true;
}
}
// vytvoreni objektu
Domek gatusoHouse = new Domek();
// pouziti objektu ... volani jeho metody
gatusoHouse.Zazvon();
Základem každého objektu jsou data. A říká se jim různě ... někdo říka data objektu, někdo říká atribut, někdo zase vlastnost ... možná jsou i jiné. Řádek:
private bool zvonek;
definuje dato/datový člen/atribut/vlastnost zvonek, který je typu bool a jeho přístupová práva jsou private (soukromý - není přístupný zvenku).
Protože by měla být všechna data veřejně nepřístupná (private), tak je potřeba se k nim nějak dostat. Nějak s nimi pracovat. JInak řečeno, potřebuješ na ten zvonek nějak zazvonit. Nelze kvůli zazvonění vlést do domu a zacinkat přímo na zvonek. Musí to jít nějak zvenčí. K tomu slouží metody (pak je ještě jedna možnost, psal o ní djanosik, ale to zase jindy).
Metody jsou vlastně funkce, jak je znáš třeba z C/C++. Pracují s daty (atributy) toho daného objektu (samozřejmě můžou mít i parametry a návratovou hodnotu stejně jako funkce). Umožňují přístup zvenčí (viz metoda Zazvon z příkladu výše).
A vztah objekt vs. metoda ... objekt může mít několik (kolik chceš) metod na manipulaci s daty, které objekt obsahuje. Je to vlastně rozhraní pro přístup k datům toho objektu.
Gatuso:
Jinak Hoffiku muzu se zeptat ta kniha Visual c# ... to je jen o grafickem prostredi asi ze ? Je nutnost znat zaklady C# nebo jiny jazyk ?
Vidíš? To je právě to "vstřebávání informací" - v odkazu, který jsem přidal se píše:
Kniha vám srozumitelnou řečí bez zbytečně složitých detailů prozradí nejen, jak nainstalovat, poprvé spustit a zorientovat se v jednotlivých obrazovkách, dialozích, nabídkách a funkcích prostředí Visual Studia 2005, ale vysvětlí vám také základy programovacího jazyka C#, popíše datové typy a proměnné, matematické i logické operátory, příkazy, formuláře, práci se soubory, a seznámí vás se základy vytváření webových nebo databázových aplikací.
Nevím, co přesně myslíš tím grafickým prostředím.. GUI? Každopádně si myslím že by tvůj problém vyřešila..
Myslím, že není nutnost znát nějaký jiný jazyk, pokud chceš začít v C#. Samozřejmě je to vždycky výhoda, ale ne podmínka.. Je to i můj případ (i když jsem zatím nic moc nedokázal (kde to NIC převažuje :o)) ).
Každopádně je nutné znát nejenom kam psát kód a jak ho psát, ale taky vědět, proč tu konkrétní věc děláš. Podívat se na to s odstupem. Proto jsem ti doporučil i tu druhou knížku obecně o OOP (tam jsou příklady v Javě (syntaxe hodně podobná C#) a C++).
To liborb : Libore tobe sem napsal Poštu my sme domluvený, jeste jednou dík
To Hoffik : Hele nebudu kecat, precetl jsem si to az sem postnul ten dotaz ale cetl jsem to :) Beztak bych chtel videt tvuj nazor na tu knihu (jakozto pro mne uplnou lamu bez znalosti predesleho jazyka jestly je opravdu ...) a s tou grafikou, no myslel jsem jako jestly se tam od zacatku delaj hned okna nebo pekne postupne pres konzole az po okna :) Jinak ta kniha s OOP - cetl jsem tam ze je pro lidi co nemohou OOP prijit na kloub, muzes mi rici jak se ti cetla ? jsou tam vysvetleny ty vsechny ty pojmy srozumitelne a pekne pomalu te vysvtelujou zaklady OOP ? Proste jak asi vidis tak sem hrozna lama takze jestly je ta kniha pro mne urcena hlavne napis sve zkusenosti :) Uvazuji totiz o koupi ... :)
To gatuso : Hlavně nesmíš čekat, že si přečteš knížku a budeš tomu rozumět, že to do tebe někdo nasype. Jak psal Hoffik, musíš ty informace přijmout a přemýšlet o nich.
To gatuso :
Můj názor? Už byl řečen. Tak znovu. Obě knížky ti vřele doporučuji. Obě se čtou skvěle, jsou psány česky, jsou pro úplné začátečníky. Nebudou tě zatěžovat (pro tebe) nepotřebnými věcmi, tímto ušetřený prostor využijí k zopakování a urovnání těch základních informací. Doporučil bych ti koupi obou.
Na té "o OOP" mě malinko zamrzely příklady - většinou v C++, dost v Javě, ale ne moc v C#. Každopádně si říkal, že už s C++ máš nějaké zkušenosti. Takže no problem.
Ta "o C#" popisuje částečně konzolové aplikace, ale samozřejmě se zaměřuje nejvíce na formuláře. Každopádně je zde i úvod do databází (za ten jsem fakt vděčný), tvorba webových aplikací... Prostě si je půjč/kup, pořádně přečti (= pochop) a uvidíš, že se potom zasměješ otázkám které si tu pokládal.. (Ne, že by ty otázky byly špatné, jen z vlastní zkušenosti vím že si pak uvědomíš "jak jsem to mohl nechápat" :-) )
Hodně síly při studiu..
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Začátečník — založil Otis
C++ - začátečník — založil Diccon
Zacatecnik — založil sa54d
Začátečník — založil Empty
C++ a začátečník — založil Mr.Boss3D
Moderátoři diskuze