"Metody" to są funkcje zdefiniowane w klasach. W klasie - metoda, poza klasą - funkcja:
Tu pojawia się rozgraniczenie klasa - obiekt. W programowaniu obiektowym "
klasa" to jakby przepis z książki kucharskiej - nie ma "jadalnej" formy, to tylko formułka. Na podstawie
klasy (przepisu) konstruuje się
obiekt (ciastko) - obiekt czasem nazywa się
instancją klasy ("fizyczną realizacją przepisu").
Twoje DNA to Twoja klasa. Ty to instancja tej klasy. Jak masz brata bliźniaka jednojajowego, to jesteście dwoma instancjami tej samej klasy. Teraz mega uproszczenie: Wasze DNA definiuje metodę "
powiedz(std::string co)". DNA nie potrafi mówić (nie ma strun głosowych). Nie możesz zrobić
DNA_Mateusza::powiedz("Dzień dobry"). Mówić potrafią tylko instancje skonstruowane na podstawie tego DNA. Dlatego polecenie powiedz możesz skierować tylko do konkretnej instancji, np
Mateusz.powiedz("Dzień dobry").
*
main() jest funkcją - jest zdefiniowana poza jakąkolwiek klasą.
*
plik.good() jest metodą
klasy fstream (*) wywołaną na rzecz
obiektu plik.
plik jest jednym (z prawdopodobnie wielu)
obiektów skonstruowanych według przepisu na
klasę fstream.
(*) fstream jest tylko przykładem. Może istnieć dowolnie wiele różnych klas mających metodę
bool good(). To, o którą klasę w rzeczywistości chodzi wynika z definicji zmiennej
plik gdzieś wcześniej.
W zapisie
std::string testowy("Test me!")
x = testowy.size()
-
std::string jest klasą
-
testowy jest obiektem skonstruowanym na podstawie tej klasy.
-
size() jest metodą klasy
std::string wywoływaną na rzecz ("w kontekście") obiektu
testowy.
A co do nazw -
if czyta się w kontekście programistycznym zawsze jako
jeżeli. Więc funkcja
if_file_is_opened czyta się jako "
jeżeli plik jest otwarty". No i jeżeli jest otwarty to co? To nie wynika z nazwy funkcji. Natomiast jeżeli metoda nazywa się
is_file_opened to tłumaczymy to na "Czy plik jest otwarty", na co jest oczywista odpowiedź tak/nie i dokładnie wiadomo kiedy która zostanie udzielona. W kontekście metod klasy, czasami opuszcza się podmiot, jeżeli jest on właśnie tą klasą: na przykład jeżeli klasa to
file to metoda nazywa się już tylko "
is_opened" - "
jest otwarty", bo wiadomo że chodzi o plik, jeżeli to jest metoda klasy plik...
if(file.if_file_is_opened() == false) error();
jeżeli((jeżeli plik plik jest otwarty) równe jest nie) błąd().
if(! file.is_opened()) error();
jeżeli((plik jest otwarty) równa się nie) błąd().
Kompilatorowi jest ryba, jak nazwiesz funkcje. Ale osobie czytającej kod (także Tobie, za miesiąc - wiem co piszę) może utrudnić to życie, za zasadzie "co autor miał na myśli".