Definuji vektor a skalární součin jakožto jednu z jeho operací.
Matice bude mít vnitřní reprezentaci pole m×n, budu-li potřebovat přistupovat k řádkovým/sloupcovým vektorům, nabídne je matice ad hoc pomocí vektoru.
To neni uplne idealni, protoze ta matice bude muset pro dany radek/sloupec vytvorit novy vektor.
Čtvercová matice by byla potomkem obecné matice
Asi jako ma byt ctverec potomkem obdelnika?
a operace nad ní, jako třeba determinant (to měl být asi ten "permanent"?), by byly realizovány v jejím rámci.
Mel to byt permanent, a z dobreho duvodu.
U determinantu se da predpokladat, ze ho autor te tridy matice zahrnul jako metodu. Ale u permanentu.. uz to nebyva bezne. Ale co kdyz ja takovou metodu potrebuji?
Znovu opakuji fundamentalni otazku: Mam novy algoritmus a chci ho aplikovat na stavajici objekty (tridy). Jak to udelam, aniz bych porusil data hiding?
Ja jsem presvedceny o tom, ze data hiding je v podstate posetilost. Je to snaha vyhnout se slozite necemu, cemu se ve finale vyhnout neda.
Popisu strucne, jak by se takovy problem resil ve funkcionalnim programovani. Je to pomerne primocare. Kdo by psal ten algoritmus by ho parametrizoval nejakymi funkcemi (predanymi jako argument), ktere z obecnych objektu vyberou presne to, co ten algoritmus potrebuje znat, aby fungoval. V miste, kde se ten algoritmus vola, se pak takove funkce bud explicitne vytvori, nebo se pouziji uz existujici, a dodaji se spolu s temi konkretnimi objekty jako parametry toho algoritmu.
Takze napriklad, funkce pro vypocet permanentu potrebuje pristup k obecnemu prvku matice, takze bude parametrizovana funkci, ktera pro obecny typ (ktery bude predstavovat neco, co ma tu matici) a dany index vrati prislusny prvek. Autor algoritmu na vypocet permanentu tuto funkci nemusi znat.
Teprve v miste volani se zvoli tato funkce na zaklade struktury, s kterou chceme pracovat, a vlozi se jako parametr do toho algoritmu na vypocet permanentu. Ovsem k tomu, abychom tu funkci mohli zvolit, musime znat konretni vnitrni strukturu objektu, s kterym chceme pracovat, a tudiz musime porusit data hiding.
(Odbocka: Tohle reseni pak tak nejak prirozene vede k definici typovych trid - typova trida je vlastne soubor funkci, ktere muzeme volat nad ruznymi typy, neco jako interface, ale rozsiritelne.)
Chci zduraznit jednu vec - to funkcionalni reseni je v zasadni veci odlisne od pristupu, kdy treba ta trida matice poskytuje metodu, ktera vrati dany prvek. Kompilator totiz muze prislusnout funkci, ktera poskytuje prvky matice, zahrnout primo do prislusneho algoritmu a spolu s ni ho optimalizovat. Coz je v protikladu k data hiding, kde se ta metoda chape jako nejaka "poslana zprava". Ja nechci poslat zpravu, ja chci aby ten algoritmus mohl primo pracovat s prvky te matice. (Jinak vysvetleny ten rozdil jsem uz naznacil o x-prispevku driv - kdyz jsem psal o vyhodach FP vuci OOP - ze se jen predavaji stejna data je netrivialni poznat, ale ze se nekde vzdy aplikuje funkce identity pozna prekladac pomerne snadno.)