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“.
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 036×
Přečteno 25 226×
Přečteno 23 682×
Přečteno 20 066×
Přečteno 17 765×