Diskuze: Chci si napsat svůj program a nic za to neplatit
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj, to co chceš i kdybys našel, tak ti k ničemu nebude. Java je objektové programování, což se o Basicu říct nedá. Abys porozuměl knihám, internetu a souborům o Javě, musíš pochopit nejdřív obecně objektové programování. I na to zde jsou dobré tutoriály. Nic jiného než dokola číst, zkoušet a snažit se najít souvislosti + pochopení ti nikdo asi neporadí. Programování je o stovkách a tisících věnovaných hodin času. Nic není zadarmo ač se to na první pohled možná zdá. Musíš usoudit sám, zda je pro tebe lepší hledat a učit se mnohem více hodin na různých místech danou věc, nebo zda za naučení stejné věci nejsi ochoten něco zaplatit kde je to všechno přehledně od A do Z ušetřený čas investovat do něčeho jiného.
Lubor Pešek:9.8.2022 14:50
No nevím, jak je tohle vlákno po měsíci a půl aktuální, ale popravdě
jsem z takového požadavku trochu zmatený.
Píšeš v jedné větě: protože nemám moc schopností,,
tenhle způsob psaní programů mi vyhovuje asi nejvíc
A hned v následující větě napíšeš: Rád bych uplatnil na PC nebo mobilu
nějaké schopnosti, které v této oblasti mám
Přiznám se, že já jsem čistě objektově orientovaný programátor (proto mám teď třeba s JS velké problémy) a o Sinclair tady čtu poprvé. Když jsem si to v rychlosti vygooglil, připadá mi to jako hybrid assembleru a céčka, ale to je fuk.
Když to řeknu zjednodušeně, tak úplně základní myšlenka OOP je
postavená na tom, aby se pokud možno virtuální svět a vše, co
programuješ, podobalo reálnému světu. Proto vznikly i metodiky, bez kterých
ti sice kód bude fungovat, ale jejich nedodržování potom vede k
nesmyslům.
Například: Jedno z pravidel OOP je SRP (single responsibility principle). V
podstatě to znamená, že když definuješ metodu, tak aby se metoda zabývala
pouze tím, k čemu je určená (zrovna předevčírem jsem o tom tady psal
"komentář" Píšu
uvozovky, protože mé komentáře bývají větší, než články
). Takže když máš třeba
metodu nastavTlacitko(), tak bys od takové metody asi neočekával, že
tlačítko vytvoří, že bude řešit matematickou logiku atd. Ano, jde to do
té metody narvat a bude ti to fungovat, ale pak to ztrácí smysl.
Takže OOP znamená ve stručnosti, že jak funguje svět, tak by měly
fungovat i programy.
Když v reálném světě vyrobíš židli, tak to samé bude i v
programování. Když v reálném světě nemůže židle propadnout podlahou,
tak by neměla propadat ani v programování. Takhle se na to musíš
dívat.
Rozdíl mezi OOP a strukturovaným programováním (nebo scriptěním
scriptů) je především v tom, že už z názvu orientovaně OBJEKTOVÉ
programování si celý program rozdělíš na objekty.
No a celkově smyslem toho všeho je, že každý objekt (část programu)
programuješ samostatně a pokud možno naprosto nezávazně na ostatních
objektech.
Například - když bys ve strukturavaném programování programoval robota,
tak v jednom souboru od shora dolů budeš programovat kompletně všechno
(aspoň tak mi to bylo vysvětlováno jak říkám - já jsem čisto krevný OOP developer, takže mám o
strukturovaném programování jen ty nejhorší představy:) )
Na rozdíl od toho budeš v OOP třeba programovat dejme tomu samostatně
končetiny (a těm budeš dávat pouze jedinečné funkce. Nohy budou chodit,
zatímco ruce budou mávat, držet, ukazovat fakáče, atd. A hlava bude třeba
mrkat, vrtět se, plakat, smát se atd.)
To je ten zásadní rozdíl v pohledu na OOP.
Když bych ti řekl třeba příklad z praxe, tak jedna část programu bude
řešit pouze a jenom zpracování dat do databáze a nebo do kódu.
Druhá část zase bude řešit pouze a jenom mapování, druhá část bude
řešit business logiku, třetí část bude vše managovat, atd. atd. atd.
Prostě každý úsek bude mít pouze jednu odpovědnost.
Výhody jsou patrné - pokud programuješ dejme tomu zobrazení
trojúhelníku na základě vypočítaných souřadnic, tak nehrozí
nebezpečí, že bys omylem třeba narušil výpočet těchto souřadnic. Ty se
řeší samostatně a zase jiná část kódu řeší právě jejich zobrazení
atd.
A jak jsem řekl - máš takhle pracovní proces i v reálu.
Dejme tomu, že jsi výrobce aut.
Tebe nezajímá, jak kdo vytvořil šroubek, jaké nástroje na to použil a
jaké k tomu použil postupy. To je jeho problém. Ty chceš po něm objekt
(šroubek). To samé barva laku. Tebe nezajímá, jakými chemickými postupy
vyrobili tu barvu. Ty si prostě koupíš barvu (objekt) a použiješ ji.
A na tomhle principu jsou třeba právě založeny ty knihovny. Knihovna není
skutečně nic jiného, než někým jiným naprogramovaný kód, který něco
umí a ty jen využíváš tento kód. Vytvoříš si z těchto programů
objekty a pak už jen voláš (volat = používat) metody (metoda = funkce
objektu), tak, jak se ti hodí.
Co se týče toho pojmu třída...
Tak třída je spolu s objektem prakticky základní stavební dvojice OOP.
Objekt = už něco hotového, co můžeš specifikovat.
Třída = něco jako předloha, kterou ty sice programuješ, ale je to něco
abstraktního, z čeho se právě vytváří konkrétní objekty.
Nerad používám slovo šablona, protože šablona znamená, že by všechny
objekty byly pak stejné, ale v podstatě by sis mohl třídu představit jako
továrnu na objekty.
Například: Máš auto. Auto samo o sobě nemůžeš nijak popsat. Když 100
lidem řekneš, ať si představí auto, tak je prakticky vyloučené, aby si
dva lidé představili naprosto to samé auto (pokud nejsou z jedné rodiny a
nebudou myslet na svého žigulíka zaparkovaného v garáži )
Auto je tedy třída.
A proč? Protože ty můžeš říct, že vytvoříš nové auto (instanci
třídy) (instance je synonymum pro objekt. Máme pro tu samou věc dva pojmy,
abychom vypadali víc chytře ). A když vytvoříš nové auto, tak teď je na tobě:
- Kolik bude mít kol? 3, 4 a nebo 6 (třeba tahač)
- Jakou bude mít barvičku?
- Jaký to bude typ? (sedan, SUV, kombik)
- Jakou bude mít SPZ?
- Jakou bude mít značku?
atd. atd. atd.
Takže třída prostě značí něco, z čeho se teprve budou vytvářet
objekty. Je to něco, co nemůžeš přesně specifikovat.
Objekt naopak právě můžeš specifikovat a už s ním nějak pracovat.
Malinko matoucí může potom být v kódu to, že ty neprogramuješ objekty,
ale právě třídy. V té třídě najednou všechno nastavuješ (budeš tam
psát, že "třída má atribut (vlastnost) spz, že má atribut značku, že
má atribut počet kol" atd.)
Jenomže to je právě všechno příprava na budoucí objekty.
Popravdě v tom je celá krása toho programování. Ty jako programátor
právě určíš, co tvá třída bude umět.
Dejme tomu - budu programovat třídu MatematickeOperace.
A tuto třídu zadáš 3 programátorům a ať ji naprogramují. Samozřejmě,
tak jak ti to teď v tuto chvíli popisuji, tak špatný programátor by hned
začal programovat a tak by to být nemělo. Správný postup je takový, že
programátor nejdřív zjistí, co se po něm chce (takže by mi měl říct -
fajn, chceš, abych naprogramoval třídu MatematickeOperace. Co všechno ta
třída má umět? Tím se myslí, co budou umět objekty, které se z této
třídy vytvoří?), ale teď na demonstraci, abys pochopil ty rozdíly, tak od
tohoto upustím:)
- programátor napíše kód v této třídě tak, že ta třída bude umět jen sčítat, odčítat, násobit, dělit.
- programátor napíše tu třídu tak, že bude umět výše uvedené 4 úkony + zjišťovat medián, počítat průměr, práci s procenty, výpočty obsahů, objemů a obvodů, výpočet pravděpodobnosti, a prostě spoustu dalších věcí.
- programátor je idiot a místo toho, aby třída pouze obsahovala funkce pro výpočty, tak tam do toho narve i vypisování výpočtů do nějakého okna, vytváření souborů, které tyto výpočty budou ukládat atd.
Ano, to by bylo potřeba, ale určitě bys nehledal metodu ulozitDoSouboru() ve třídě MatematickeFunkce. To je to samé, jako kdybys hledal funkci prodatKladivo() ve třídě Drogerie nebo funkci vypravVlak() ve třídě Koupaliště. Ano, šlo by to naprogramovat, ale je to nelogické (čili není to objektově orientované).
No a popravdě nevím, co tě k tomu programování vede. Jestli nepochopíš tak základní vlastnost OOP, jako co to je třída (což doopravdy je v OOP světě asi to samé, jako se v matematice naučit psát číslice), tak pak zvaž svou touhu programovat. Existují daleko složitější praktiky a pojmy. Kupříkladu dědičnost, to je hodně široká oblast a hlavně pochopit, kdy má smysl a kdy ne, to je na ní to nejtěžší...
Každopádně pokud bys měl dobré nápady, tak i tak se v IT můžeš
uplatnit. Analytici jsou víc nedostatkové zboží, než developeři.
Programátoři to mají ve skutečnosti velmi jednoduché - ti se musí naučit
tyto výše uvedené praktiky, ovládat je a dávají především pozor na to,
aby kód měl hlavu a patu a aby se v něm hlavně jiní programátoři
dokázali rychle orientovat. Ale jinak mají jednoduchou práci - zpracovávají
požadavky zákazníka/analytika do kódu.
Analytik má naopak velmi těžkou práci - vymýšlí CO je potřeba
naprogramovat a celkovou realizaci aplikace. Pak jen řekne - hele, tohle a
tohle mi někdo napište tak, aby to uměl počítač. A programátor pak řekne
- jo, to zvládnu a na toto bude vhodná Java, nebo JS nebo Python, atd.
Tím tě nechci úplně odradit, ale pokud máš problém vstřebat skutečně tu nejzákladnější věc, tak by ses mohl potom prakticky neustále trápit.
DarkCoder:9.8.2022 15:48
Pokud chceš něčeho dosáhnout, je třeba postupovat systematicky. Je třeba mít jakousi představu o tom, o jaký typ aplikace se bude jednat. Je třeba si v úvodu zodpovědět zásadní otázku. Na jaké platformě má být tvá aplikace funkční. Poté je třeba zvolit vhodný nástroj, pomocí kterého svoji aplikaci napíšeš a co vše k tomu budeš potřebovat. Následně přichází na řadu studium, pěkně od základů.. Zde už není cesty zpět, musíš pochopit jak se s daným nástrojem pracuje. Různý nástroj přináší různé možnosti ale i různou obtížnost. Odhodlání, vytrvalost a touha uspět, to je co bys měl mít. Hodně zdaru!
Děkuji za obsáhlé zprávy. Pokud jsem napsal, že moc schopností nemám, klidně ale nějaké mít mohu. To není snad zas nějaký protimluv. Co jsou knihovny vím, bohužel jsem se nedostal zatím k jejich použití. Do odpovědi jsem se ale nezačetl příliš hluboko, protože je matoucí a zdá se mi násilná. Sledujte všichni blázna a pamatujte si co po vlastně po vás zopakoval a dejte si to do hlavy od něj a přemýšlejte sním jen o tom. Chtěl jsem hlavně poznamenat, že Basic dává logiku, že programu a jeho syntaxi v Javě není tak lehké porozumět. Cíl pro programátora je aby mohl vytvořit aplikace, které třeba na trhu z nějakého důvodu chybí. Myslím, že jsem konkrétní případ třeba uváděl. Zde jsem nalezl po čase zase aplikaci, která batoh pohlídá, ale zase není tak uzpůsobená, jak bych chtěl. Kdyby byla psaná v Basicu, dokázal bych možná nalézt potřebné proměnné a možná jí upravit v Javě určitě ne. Co je programování objektové není ani tak zcela jasné. I v jazycích jako je Basic existují podprogramy a větvení, kde se pro určité rutiny odskakuje vedle, protože je potřeba aby byly dostupné z více míst a je blbost je psát za sebou znovu. To ale asi těmi objekty nenazýváme. Zase je otázkou na kolik je pevný proti zásahům zvenčí třeba ten systém počítače. Ono třeba můžeme si vytvořit program na nějaké výpočty nebo speciální kalkulačku na nějaký vzorec, což můžeme udělat ale klidně i v Excelu. Ale pokud někdo získá informace o fungování počítače a www atd., kde jsou třeba systémy bezpečnosti a bank a bude pomocí nějaké rutiny třeba mapovat a dekódovat celou RAM a s výstupy nějak nakládat.ohrožuje únik takových znalostí další osoby a systémy a finance celých firem. Pokud někdo vytvoří třeba ten šroubek do toho auta jako do programu, mě budou zajímat jeho vlastnosti. Tj. vstupy a výstupy toho šroubku. To je blbost. A dál. Do úrovně vstupů a výstupů se k takovým věcem se v literatuře moc dostat nejde. Pokud mi někdo na 150 stranách vysvětluje proměnné, přitom se vyhne použití klasické syntaxe a nevysvětlí třeba důvod proč se používá tak, je to pro mě sice zázrak, že dovede tak dlouho kecat o ničem a zatěžovat mozek nesmysly, ale já si z toho nedokážu nic nového vzít. Vlastně jen se různě dokola kroutí a přehazuje co je jasné a co člověk zná vlastně od mala. Jak říkám, pokud bych chtěl třeba programovat, bude mě zajímat, jak otevřu v systému okno pro svůj program, vytvořím třeba tlačítka, seznam slov toho kterého jazyka, jejichž skládání bylo třeba v jazyku Basic logické. Jsem člověk a jako člověk přemýšlím, jsou pro mě důležité věci hmatatelné ne abstraktní. Zase kde jsou ale hranice té bezpečnosti. Tím bych asi tuhle diskusi protože jsem ji začal i skončil.
Zobrazeno 5 zpráv z 5.