LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> Perl (58) - OOP - úvod

Perl Co to je objektově orientované programování a jak se liší od programování procedurálního? Tomu bude patřit několik následujících dílů.

8.6.2007 06:00 | Jiří Václavík | Články autora | přečteno 22361×

Objektově orientované programování (object-oriented programming, dále OOP) je způsob programování, při kterém je na řešený problém nahlíženo z jiného hlediska, než jako tomu bylo doposud. Jde o to, že program je soustavou objektů, které spolu komunikují a ovlivňují se (narozdíl od procedurálního programování, kde je programem seznam příkazů a volání funkcí, jež je prováděn "shora dolů"). Ze všeho nejdříve jsou vytvořeny právě tyto objekty a nich je následně program sestaven. Hlavní myšlenkou pro vznik OOP bylo, aby objekty korespondovaly s věcmi z reálněho světa.

Vezměmě si telefon jako příklad objektu. Voláme, přijímáme hovory, posíláme a přijímáme SMS atd. Vůbec nás nemusí zajímat nic o tom co je uvnitř a jak to funguje. Není to potřeba k tomu, abychom ho mohli používat. Používáme pouze rozhraní telefonu - tedy funkce, které nabízí (což je nějaká soustava procedur). Stručně řečeno, to, že nevíme, jak telefon funguje, není důležité, ale důležité je, že víme, jak ho používat. To je základní myšlenka OOP.

OOP nebude záležitost pouze několika příštích dílů, ale budeme se s ním setkávat ve zbytku seriálu prakticky na každém kroku. Ať už půjde o práci s databázemi, CGI, návrhem grafických uživatelských rozhraní nebo psaní modulů. Jedná se o důležitý nástroj pro programy většího rozsahu.

Pojmy objektově orientovaného programování

Vysvětleme si nyní podrobněji některé základní pojmy OOP.

Objekt

Jak již z názvu vyplývá, objekt je základem OOP. Objekt reprezentuje jednu konkrétní věc. Každý objekt má nějaké atributy a chování. Atributy jsou vlastnosti, kterými se liší objekty též třídy - například barva a výška. Chování jsou činnosti, které mají všechny objekty dané třídy stejné.

Uveďme příklad. Z funkčního hlediska je úplně jedno, jestli používáme černou nebo bílou CD-ROM mechaniku. Černá a bílá mechanika patří do stejné třídy, ve které je definován atribut barva. Jinak fungují úplně stejně.

Třída

Třída je šablonou pro objekty se stejným chováním. Podobné objekty (lišící se jen v atributech) jsou definovány právě podle této šablony. Jsou zde definovány činnosti, které mohou objekty provádět.

Instance třídy

Každý objekt spadá pod nějakou třídu. K této třídě je příslušný objekt instancí. Pokud máme třídu CD-ROM mechanik, jejími instancemi budou mechanika1, mechanika2, mechanika3... mechanika1 bude například černá a bude číst rychlostí 40x. Všechny CD-ROM mechaniky (ta moje, ta vaše i všechny ostatní) jsou instancemi třídy CD-ROM mechanika. Všechny poskytují stejné služby (čtení CD, vysunutí apod.) a liší se v atributech - tedy záležitosti jako je barva, rychlost čtení apod.

Metoda

Metoda je podprogram, který se vztahuje pouze k určité třídě a může tak být volána pouze pro instance této třídy. Třída CD-ROM mechanik asi bude těžko obsahovat metodu nakresli_elipsu. Tuto metodu budou ale obsahovat třídy pro návrh grafických aplikací, například QPainter z knihovny Qt.

Ač to nyní není nezbytné, zmiňme, že existují dva druhy metod - metody třídy a metody objektu. Příkladem metody třídy je většina konstruktorů. To je metoda, která se nevolá nad žádným objektem, ale objekt vytváří. Metody objektu jsou obvykle volány nad objektem.

Zpráva

Zpráva je prostředek komunikace objektu s okolím. Například pro vysunutí CD z mechaniky stiskneme tlačítko na mechanice. Tím vyvoláme metodu a mechanice předáme zprávu, kterou oznamujeme, že má vysunout CD. Podmínkou toho je, aby mechanika tlačítko pro vysunutí měla - musí existovat příslušná metoda.

Rozhraní objektu

Rozhraní (často interface) objektu je množina zpráv, kterým objekt rozumí. Uživatele objektu zajímá právě jen rozhraní.

Objektově orientované programování v Perlu

V Perlu nejsou pro OOP téměř žádná speciální klíčová slova. Vše je řešeno pomocí nám známých konstrukcí. Připomeňme, že šetření klíčovými slovy se vyskytuje i v jiných oblastech, vzpomeňme na řešení výjimek.

Reprezentace objektu, metody a třídy v Perlu

Třídou je obyčejný balík definovaný pomocí klíčového slova package. V něm jsou definovány metody. Třída se často vytváří v souboru odděleném od programu jako modul.

Objekt, resp. atributy objektu jsou obvykle odkazem na hash. Není to sice pravidlem a teoreticky objekt může být třeba i odkazem na pole, ale toho se využívá ze zřejmých důvodů jen sporadicky.

A nakonec metody jsou obyčejné podprogramy. Prvním argumentem každé metody je odkaz (platí u metody objektu) nebo jméno třídy - balík (u metody třídy).

Vytvoření objektu

Všechnu činnost při vytváření objektu obstarává funkce bless. Ta přijme jako parametr odkaz (obvykle na hash) a označí tento odkaz jako instanci aktuální třídy. Funkci bless lze předat jako další parametr i jméno třídy, se kterou se má objekt svázat.

$objekt = {};           #$objekt odkazuje na anonymní hash;
                        #zatím není objektem, ale pouze odkazem

bless $objekt, "Trida"; #$objekt je svázán s třídou Trida
bless $objekt;          #$objekt je svázán s aktuální třídou (např. main)

Vzpomeňme si nyní na funkci ref. Pokud je jejím argumentem objekt, vrací jméno třídy, ke které je tento objekt instancí.

$objekt = {};
bless $objekt, "Trida";
print ref $objekt; #tiskne Trida

Volání metod

Objekt může využívat metody své třídy (nebo později tříd, z nichž tato třída dědí). Metoda se volá takto.

$objekt->metoda(parametry);

Před všechny předané parametry je na 1. místo implicitně uveden odkaz na objekt, jehož metodu voláme.

Speciální metody - konstruktor a destruktor

Konstruktor je speciální metoda, která je důležitá při vzniku instancí. Konstruktor se obvykle nazývá new. V Perlu to však není pravidlem. Narozdíl od jiných jazyků, jako například C++, lze konstruktor nazvat jakkoliv a dokonce jich může být i více.

Konstruktor vytvoří hash, přiřadí objekt dané třídě a případně inicializuje prvky hashe.

Destruktor je další speciální metodou, která je volána při zániku objektu. Má pevný název DESTROY a je volána vždy, když program opouští rozsah platnosti tohoto objektu. Protože však v Perlu nemusíme dealokovat paměť, což je obvykle hlavní úloha destruktoru, nevyskytují se metody DESTROY až tak často.

Verze pro tisk

pridej.cz

 

DISKUZE

Super 8.6.2007 20:27 bleskone




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

28.11.2018 23:56 /František Kučera
Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1

12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář

6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

31.7.2023 14:13 / Linda Graham
iPhone Services

30.11.2022 9:32 / Kyle McDermott
Hosting download unavailable

13.12.2018 10:57 / Jan Mareš
Re: zavináč

2.12.2018 23:56 / František Kučera
Sraz

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze