Sembra che la pagina stia usando quei termini letteralmente, senza riferimento a nessun particolare costrutto di programmazione, quindi non c'è davvero nulla da definire. Invece proverò a dare un esempio.
Dì che hai una classe che ottiene cose da Internet. Ecco una semplice versione dell'interfaccia:
class Internet {
int sendRequest(const std::string& url, std::string& response);
}
Internet::sendRequest(const std::string& url, std::string& response) {
// parse the url into its various tokens
m_protocol = /* first token, or https if not provided */
m_domain = /* second token */
while(...) { m_parameters.push_back(/* another token */); }
...
switch(m_protocol) {
case HTTPS: HTTPSImpl.request(m_domain, ...); break;
...
}
}
Ecco una versione di implementazione semplice:
class Internet {
int setProtocol(Internet::Protocol protocol);
int setDomain(const std::string& domain);
int addParameter(...);
...
int sendRequest(std::string& response);
}
Internet::request(std::string& response) {
switch(protocol) {
case HTTPS: HTTPSImpl.request(m_domain, ...); break;
...
}
}
Essenzialmente è un compromesso tra il fare in modo che l'implementatore si occupi della complessità rispetto all'interfaccia utente. La maggior parte delle volte verrai (giustamente) detto che nascondere la complessità dell'utente è una buona cosa, ma la pagina di Richard Gabriel sostiene che potrebbe non essere sempre così.