Začal jsem uvažovat o objektově orientovaném programování v bashi. Na mysli mi přišla představa kterou tady popíši a kterou chci vyzkoušet.
Objektově orientované programování, dál již jen OOP má několik základních vlastností, jsou to:
Zapouzdření (Encapsulation) znamená že existuje hranice ktaré vyděluje vnitřní části objektu od okolního světa.
Polymorfismus, to je, že každý objekt reaguje na stejnou zprávu mu zaslanou z vnějšku svým vlastním osobitým způsbem. Mějme dva objekty ''a'' a ''b''. Každému z nich pošleme stejnou zprávu
# a pozdrav dobrý den # b pozdrav čau
Tedy oba objekty dostali stejnou zprávu ale každý na ni reaguje jiným způsobem.
Objekty. V bashi nemáme mnoho možností jak reprezentovat objekty, paměťové struktury jsou značně primitivní. Zbývá použít souborový systém. Objekt tedy reprezentujeme nějakým elementem soborového systému. K dispozici máme jen dvě možnosti: soubor a adresář.
Objekt reprezentovaný souborem. Pokud budeme chtít reprezentovat objekt souborem, tedy jedním souborem, musíme se vyrovnat s tím, jak do něj uložit vše potřebné, tedy metody a atributy. T.j. v souboru budou části reprezentující jednotlivé části oběktu a při měnách v těchto částech musí být soubor měněn (editován). Editován myslím progamově.
Objekt si můžeme představit jako skript/program. Volání metody objektu je pak spuštění programu s metodou jako parametrem:
# obj method
# obj method
Celkově se mi zdá tento způsob implementace objektů nevhodný z důvodů komplikovného meodfikování atributů objektu.
Objekt reprezentovaný adresářem. Druhá možnost je reprezentovat objekt skupinou souborů, každý pro jeden atribut/metodu. Změna hodnoty atributu se pak uskuteční jednoduše přepsáním souboru. Například nastavení atributu **var** na hodnotu 45 realizujeme snadno následovně:
echo 45 >var
Soubory můžeme "svázat" jménem, respektive jeho částí, nebo adresářem. V tomto případě tvoří obsah adresáře jeden objekt.
Máme-li jméno objektu (adresáře) v proměnné **obj** , můžme volat metodu **metoda** s parametrem 42 takto:
$obj/metoda 42
Zprávu objektu pak pošleme pomocí zprostředkovatelské funkce/příkazu **sendmsg**:
sendmsg $obj metoda 42
Základní metody:
obj addSlot: <symbol> obj addSlot: <symbol> valued: <value> obj addImmutableSlot: <symbol> valued: <value> obj removeSlot: <symbol>
Objekty jsou reprezentovány adresáři. Jeden adresář jeden objekt. Uvnitř adresáře jsou soubory reprezentující jednotlivé části objektu jako jsou: