vaha.zvazit(osoba)
osoba.zvazitSe(vaha)
Oboji je spatne. Melo by to byt akce::zvazit(osoba, vaha) - a je to. Osoba nemusi znat nic o vaze, a vaha muze umet vazit treba i zvirata nebo mouku.
Cele OOP je do jiste miry divne, nuti nas vazat akce na konkretni objekty, ktere by klidne mohly byt naprosto nezavisle.
Jenže pak zjistíš, že těch postupů nebo metod vážení je víc, není to jen jedna univerzální akce
zvážit(). Takže můžeš mít např. rozhraní
PostupVážení s metodou
zvážit(Osoba, Váha) a několik alternativních implementací tohoto rozhraní. Ta
PostupVážení může mít ještě nějakou parametrizaci (její součástí může být i ta
Váha – a pak voláš jen
zvážit(Object)).
Objektové jazyky jsou asi nejflexibilnější – byť s jinou syntaxí, v nich můžeš realizovat to, co jinde. Statická metoda, která vrací hodnotu je funkce. Statická metoda, která má jen (vstupní/výstupní) parametry, je procedura. A např. návrhový vzor továrna je funkce, obvykle používaná jako funkce vyššího řádu. Typicky ji někam předáváš jako parametr nebo ti ji někdo vrací jako návratovou hodnotu. A oproti jiným paradigmatům umožňuje OOP spojit více funkcí/metod, které k sobě logicky patří, plus související data, do jednoho objektu.
(samozřejmě to má svoje úskalí, viz ten můj odkazovaný článek, a není dobré se do toho vrhat bezhlavě, trochu krotit prvotní nadšení a držet kreativitu na uzdě, ale to platí všude)