Post-OOP

8. 12. 2015 1:51 (aktualizováno) zboj

Poslední dobou se lze čím dál tím častěji setkat v odborných textech s pojmem „Post-OOP“. Co je tím myšleno? Máme například už nějakou dobu „post-PC world“ (tento pojem popularizoval Steve Jobs), post-OOP má ovšem uchopitelnější význam. Stačí stáhnout si Swift a trochu experimentovat s tzv. „protocol-based programming“, což je nepříliš šťastný název používaný Applem pro jím prosazované „nové“ paradigma (uvozovky proto, že se nejedná o nic převratně nového, spíše o evoluci OOP směrem k funkcionálnímu programování a algebraickým datovým typům).

Řekněme, že chceme mít metodu pro převod různých datových typů do JSONu. Zavedeme tedy protokol

protocol JSONTranslatable { var JSONString:String { get } }

Pro řetězce potřebujeme zvláštní metodu:

extension String : JSONTranslatable { var JSONString:String { let str = stringByReplacingOccurrencesOfString("\"", withString: "\\\"") return "\"\(str)\"" } }

Co ale s číselnými datovými typy, u kterých se nic nemění? V běžném OOP by byla situace složitější, ve Swiftu ale můžeme v protokolu definovat defaultní implementaci metody (což u klasických interfaců nejde) takto:

extension JSONTranslatable where Self:CustomStringConvertible { var JSONString:String { return description } }

Dále jen řekneme, že chceme náš protokol aplikovat na typ Int (resp. další jako Float, Double apod.):

extension Int : JSONTranslatable {}

Protože Int implementuje CustomStringConvertible, jsme „za vodou“.

Výše uvedený jednoduchý příklad názorně ilustruje užitečnost prezentovaného paradigmatu, ať už mu říkáme „post-OOP“ nebo „protocol-oriented“.

Sdílet