Hermetyzacja (informatyka): Różnice pomiędzy wersjami

m
Zamieniam przestarzały tag 'source' na 'syntaxhighlight'
(drobne redakcyjne)
m (Zamieniam przestarzały tag 'source' na 'syntaxhighlight')
Niech dana będzie klasa interfejsowa definiująca jedynie interfejs, czyli zbiór jedynie publicznych, abstrakcyjnych i [[Metoda_wirtualna|wirtualnych metod]]. Metody te, zgodnie z definicją metody abstrakcyjnej, nie są wytłumaczone w obrębie tej klasy, a jedynie określono, że klasa dziedzicząca po tej klasie wytłumaczyć jak każda z tych metod działa. Na przykładzie:
 
<sourcesyntaxhighlight lang="cpp">
class Sortowacz
{
virtual int maksimum() const = 0;
};
</syntaxhighlight>
</source>
 
A następnie zakładając, że mamy dwie realne implementacje <code>SortowaczNaWektorze</code> oraz <code>SortowaczNaZbiorze</code> można wykonać następujący kod:
<sourcesyntaxhighlight lang="cpp">
int main()
{
return 0;
}
</syntaxhighlight>
</source>
Korzyść z takiego podejścia polega na tym, że interfejs dzięki hermetyzacji całkowicie milczy o sposobie zaimplementowania klasy a dodatkowo korzystając z mechanizmu polimorfizmu można posiadać wiele wymiennych klas realizujących ten sam interfejs, a to która z nich będzie wykorzystana może być zmieniane choćby w trakcie działania programu.
 
Przykład w [[C++]]:
 
<sourcesyntaxhighlight lang="cpp">
typedef double TypPieniedzy;
 
return saldo;
}
</syntaxhighlight>
</source>
 
Przykład w [[Java|Javie]]:
 
<sourcesyntaxhighlight lang="java">
class TypPieniedzy extends Double {
public TypPieniedzy() {
}
};
</syntaxhighlight>
</source>
 
Mamy klasę <code>KontoBankowe</code>. Nie powinno się tak zdarzyć, że stan konta mógłby być modyfikowany przez zwykłe odwołanie się do danej <code>saldo</code> (np.: <code>mojeKonto.saldo = 123;</code>). Tu <code>saldo</code> konta bankowego jest daną prywatną (dostęp jest ''private''), do której dostęp mają tylko funkcje zaprzyjaźnione lub funkcje składowe (wewnętrzne) (tu: <code>podajStanKonta</code>, <code>wplac</code> i <code>wyplac</code>). Powinno się zapewnić maksymalne bezpieczeństwo w odniesieniu do danej <code>saldo</code>. Stąd też metoda <code>TypPieniedzy podajStanKonta()</code> jest oznaczona jako <code>const</code>, wartość kwoty w metodach <code>bool wplac( const TypPieniedzy kwota )</code> i <code>bool wyplac( const TypPieniedzy kwota )</code> jest określona również jako <code>const</code>, aby jej wartość nie została „przypadkiem” zmieniona w trakcie działania tych metod.
1 289 123

edycje