Idiotina nazývaná > třída

Prosimvas, vysvetlete mi nekdo inteligentni, k cemu se to sakra pouziva?!
Ja jsem si o tom cet hafec textu v knizkach, ale prostě nic mi to neřiká! Jsem asi magor nebo ja nevim.
To je něco jako funkce nebo co?

class homolka {
// no a co sem mam psat?
// musi tady bejt neco jako definice promennych, coz nevim k cemu to je
// definice metod(mozna neco jinyho) .. tak to mi absolutne nic nerika
}

V knizkach kecaj vo OOP, dědičnost, ale aby tam napsali k cemu to je to neeeeeeeeeeeeeeeeee .. dikys :-)))
Třída je něco jako universální "strukturovaná funkce" (možná lépe procedura). Představ si, že existuje nějaký algoritmus, který využiješ mnohokrát a navím v různých projektech. Uděláš tedy z něj třídu a ta je univerzálně použitelná. Příklad: zjištění EXIF informací z JPG fotky. Aniž o tom něco víš, stáhneš si třídu někde z webu a zavoláš ji parametrem toho JPEGu a ona ti vráti hodnoty EXIFu. Je to dramaticky zjednodušené a nejsem si zcela jist, zda je to pochopitelné.

Třída se skládá z "vlastností" a "metod".

Primitivní příklad: osoba
vlastnosti: jméno, příjmení, titul
metody: přiřaď jméno, přijmení a titul; zjisti titul

<?php
class Osoba {
var $_titul;
var $_jmeno;
var $_prijmeni;
function Osoba($titul, $jmeno, $prijmeni) {
$this->_titul = $titul;
$this->_jmeno = $jmeno;
$this->_prijmeni = $prijmeni;
}
function setTitul($titul){
$this->_titul = $titul;
}
function getTitul() {
return $this->_titul;
}
function setJmeno($jmeno) {
$this->_jmeno;
}
function getPrijmeni() {
return $this->_prijmeni;
}
}

$ja = & new Osoba('Mr.', 'Jan', 'Novy'); //vytvořím nový objekt $ja
$soused = & new Osoba('Ing.', 'Petr', 'Radostný');

echo $ja->getTitul(); // Tady z toho objektu vytáhnu můj titul
echo $soused->getPrijmeni(); // Získám sousedovo příjmení
?>

Rozhodě to není ani pro pokročilé začátečníky, ale pro hodně pokročilé až profíky. Takže se tím nezatěžuj. Nemá smysl to používat u malých projektů. Práce s objekty je náročnější než "obyčejné" programování.
Proč se rozčiluješ? K čemu to je dobré, to musíš poznat ty sám. Jsou situace, kdy třídy (a objektově orientované programování vůbec) usnadní nejeden programátorův život.

Pokud chceš nějakou definici, o co se jedná, tak třída je souhrn vlastností a procedur, které by se daly shrnout do jednoho objektu.

K čemu to je? Chceš třeba udělat nějaký ucelený rozsáhlejší systém, kde budeš mít x podobných věcí. Dalo by se říct, že to bude podobný datový typ. Ale ty budeš chtít k těm "datovým typům" vytvořit funkce, které by s tím pracovaly.

Uvedu na příkladu. Chceš udělat skript s auty. Tak si definuješ třídu Auto, bude mít vlastnosti (proměnné) Barva, Značka, Rychlost, Síla motoru apod. Mezi jeho funkcemi bude Zavři dveře, Otevři dveře, Naplň kufr. Pak pokud budeš chtít vytvořit nějaké auto, např. Peugeot 206, tak mu přiřadíš třídu Auto a nastavíš příslušné vlastnosti.

Ale řekněme, že ti to nestačí. Že budeš chtít odlišit auta osobní a nákladní. A tady vstupuje do hry dědičnost. Definuješ třídu Náklaďák, která převezme (zdědí) definici po třídě Auto.

To co se píše v knížkách je opravdu všechno, co se dá najít. Zbytek je pro lidi s fantazií a odvahou zkoušet nové věci. Ti ostatní nemohou být programátoři, protože nikdy nepochopí magii tříd a objektů.

V praxi využití tříd:
- online hry
- rozsáhlé evidenční systémy (a možná i redakční systémy)
- šablonové systémy (template enginy)
Jeste blbeji to napisu :)

Trida (class) je objekt. Z toho vypliva objektove programovani = OOP.
No a objekt si lze predstavit jako nejakou vec. Treba auto. Vis, ze auto ma nejakou barvu, znacku, typ motoru, atd. Toto auto se pak musi nekde pridat, odstranit, prelakovat, aaa.
Proste kazde auto ma nejake vlastnosti. a tyto vlastnosti vlozis do tridy.
Pouziva se to treba k seznamu. Mas seznam aut a ke kazdemu autu das nejake vlastnosti.

No a ted to prevedeme do reci programatora ;)

auto_class.php
<?
class Auto {
var $barva;
var $znacka;
var $typmotoru;

function Auto() // prida nove auto
{
this->barva = "cerna";
this->znacka = "skoda";

}

function Prelakovat($barva)
{
this->barva = $barva;
}
}
?>

index.php

<?
include "auto_class.php";

$auto = new Auto();
echo "Znacka ". $auto->znacka;
echo "Barva ". $auto->barva;
$auto->Prelakovat("bila"); // prebarvime auto na bilou
echo "Barva ". $auto->barva;
?>
Zajimavi, ze toto pisu tak 5 minut a mezitim sem prijdou dve prispevky s domenim, ze to napisu jako prvni ;)
Tomík, a ještě horší je, že použijeme oba stejný příklad :)
Nipal: Priklad s auty je nejcastejsi pouziti jako priklad objektovyho programovani.
Nejdůležitější věcí na OOP je zpřehlednění práce programátora. Pokud se udělá dobrý počáteční návrh, tak se potom vše krásně rozdělí a kód je celkem přehledný a snadno upravitelný, protože každá třída je zodpovědná sama za sebe.

Dnes se drtivá většina programů dělá v OOP ;)

Opačný přístup je sekvenční. Představuje svým způsobem opravdu nízkoúrovňové zpracování, kód sice může vypadat krásně rozdělený, ale špatně se upravuje, pokud je větší a má se předělat činnost některé části. Sekvenčním způsobem se dnes už dělají jedině věci přímo komunikující s hardwarem a velice jednoduché věci.
Programovani je o predstavivosti.
Nejde jen o to naucit se nejake echo,if,for,while,. . ., ale i o to vedet co a jak udelat. Proste musis vedet jak to udelat, jak postupovat, co tam dat a co ne. Pokud tohle nebudes vedet, tak ti je nejake if() k nicemu.
Za programatora nelze povazovat cloveka, ktery pouziva metodu kopiruj a vloz. Ten kdo nekde na netu najde hotovy zdrojak a zkopiruje ho do svych stranek.
Programator je ten, kdo pochopi co dany prikaz dela a proc to dela.
Mnozi, vcelku spravne, namitaji, ze, co se da udelat tridama, da se udelat i std fcema. S tim nezbyva nez souhlasit, prave kouzlo trid zacina od chvile, kdy trida podedi vlastnosti jine tridy...
... i kdyz...
ted delam se tridama, kde jedna trida je html stranka, ta obsahuje seznam trid, ktere obsahuji jednotlive casti, ty mohou obsahovat jine casti....
html stranka pak zavola metodu vykresli(), ktera si zajisti vykreseleni trid, ktere obsahuje, nestara se o to, jak to ostatni tridy dejali, proste zavola metodu.
Pak si vzpomenete, ze trida input() typu datum by mohla mit krome overovani spravneho data taky takovy popup kalendaricek, dopisete metodu a voila, nemusite nikde jinde nic menit a vsechny inputy typu datum budou mit kalendaricek...
a takovych prikladu se da uvest moc...
Jak uz tu bylo receno, hodi se to na vetsi projekty. IMHO pokud se pouziva neOOP, tak se zvetsujicim se projektem vzrusta slozitost linearne az exponencialne s OOP je to temer logaritmicky max linearne. Podel sikovnosti navrhu.
Pravdou ovšem je že pro malé projekty je OOP (mluvím o PHP) spíš znepřehledňující a práci komplikuje. Resp. pro běžné weby na kterých pracuje jeden člověk a které neobsahují nějaký komplikovaný e-shop se spoustou provázaností apod. není potřeba se OOP vůbec zabývat, web bude 100% stejně funkční i bez něj.
Lepší než špatné využití OOP je žádné využití OOP.
A tak da se to kombinovat, ve vetsim projektu vymyslis objekt na uzivatele, a muzes ho pouzit i v tom mensim....
Classess sux
St. fce a proceduralni programovani rulez ;)
Whoa, to vypadá celkem prakticky. Ale jak říkáte - pro větší projekty, ne pro menší weby. A třídy v jiných třídách, to už je trochu dost... složité...
24k neumí použít třídy a jak se pěkně čuří. :-D
Adam, ono to složitě akorát vypadá. Když budeš u větších projktů jenom proc a fce, tak se v tom zachvilku nevyznáš, stejně jako 24k.
Jéé, už vidím, jak píše, že to má naprosto pod kontrolou... :-)
Hehe, nahodou ...

1/ vytvorene tridy umim pouzit a editovat :D
2/ Napsal jsem si jiz 3 vlastni tridy (sice stojej za <> :D) ale muzu se tim honosit

Ale jak rika MzM k srdci mi neprirostly, asi jeste nenastal spravny cas abych jim prisel na chut, uvidime za 1/2 roku :-)