W kodowaniu, jakie są różnice między metodami a funkcjami

Opublikowany: 2018-09-21

Terminologia w kodowaniu

W programowaniu istnieje wiele różnych terminów, które są używane do opisania dokładnie tej samej rzeczy, a także niektóre terminy, które wydają się odnosić do tej samej rzeczy, ale w rzeczywistości nie. Aby było jeszcze bardziej zagmatwane. Niektóre terminy są używane w różny sposób w zależności od rodzaju języka, o którym mówisz, a nawet przy przechodzeniu z jednego języka do innego języka tego samego typu. Dlatego niektóre terminy, takie jak „metoda”, „funkcja”, „interfejs” lub „klasa abstrakcyjna” mogą być bardzo mylące dla niektórych osób, ponieważ mogą oznaczać jedną rzecz w jednym kontekście, a zupełnie inną w innym.

Przegląd metod OOP

Metoda jest zasadniczo procedurą krok po kroku, która jest wykonywana na wyznaczonym obiekcie. Metody są używane tylko w językach programowania obiektowego, takich jak C++. Zasadniczo metoda może albo zmienić właściwości obiektu, który jest przez nią przekazywany, albo może wykonać określoną procedurę opartą na wcześniej istniejących właściwościach obiektu, który przez nią przechodzi. Czasami metoda może nawet przejść przez kod, który nie wpływa na przekazywany przez nią obiekt ani nie jest zmieniany przez już istniejące cechy obiektu. Ale jest to znacznie mniej powszechne i nie jest promowanym sposobem obsługi metod.

Przeczytaj – jaki framework JavaScript wybrać

Funkcje w kodowaniu proceduralnym

Z drugiej strony funkcja jest znacznie bardziej ogólnym terminem, który odnosi się do procedury, która pobiera wiele danych wejściowych i zwraca pewną liczbę wartości. Mylące jest to, że funkcja i metoda brzmią tak, jakby robiły to samo lub odwoływały się do tego samego rodzaju procedury podczas programowania, ale tak nie jest. Funkcje nie są powiązane z obiektami i są używane w zasadzie w każdym języku wysokiego poziomu, który nie jest zorientowany obiektowo. Z drugiej strony metody są powiązane tylko z obiektami, a termin jest używany tylko w przypadku obiektów lub gdy procedura znajduje się w klasie. Tak więc funkcje zwracają wartości na podstawie podanych danych wejściowych, podczas gdy metody zmieniają cechy obiektu lub zwracają wartości na podstawie wcześniej istniejących cech obiektu.

Interfejsy kodujące i klasy abstrakcyjne

Podobnie jak mylenie funkcji i metody. Istnieje wiele zamieszania między interfejsami a klasami abstrakcyjnymi. Jednak w przeciwieństwie do funkcji i metod, interfejsy i klasy abstrakcyjne mają ze sobą wiele wspólnego, a ich cechy są łatwe do pomylenia. Najłatwiejszym sposobem rozróżnienia tych dwóch jest zrozumienie, że interfejsy są obecne tylko w językach programowania obiektowego. Natomiast klasy abstrakcyjne są obecne w prawie wszystkich językach wysokiego poziomu.

Interfejsy dogłębne

Interfejs jest zasadniczo bazą, którą tworzysz, która uwzględnia wszystkie podobieństwa między klasami. Powiedzmy, że chcesz tworzyć różne obiekty, ale wszystkie są zwierzętami. Tak więc ludzie, małpy i szympansy. Oczywiście te trzy zwierzęta mają ze sobą wiele wspólnego i mądrze byłoby zdefiniować wszystkie te podobieństwa, aby mieć pewność, że wszystkie zostaną zaimplementowane w każdej klasie. Na przykład każdy ma głowę, cztery kończyny, usta, nos, język itp.

Tak więc w interfejsie definiujesz te cechy i dlatego, że zdefiniowałeś je w interfejsie. Kiedy każda klasa implementuje interfejs, musi zdefiniować i zainicjować te cechy za pomocą zdefiniowanych metod w interfejsie. W przeciwnym razie kod się nie uruchomi. Głównym powodem, dla którego używałbyś interfejsu zamiast klasy abstrakcyjnej, jest to, że każde zwierzę ma te same cechy. Ale każde zwierzę realizuje je inaczej. Na przykład wszystkie szympansy. Ludzie i małpy człekokształtne mają nosy, ale ich szerokość, długość i przeznaczenie mogą się nieco różnić. Dlatego różnice te są definiowane w poszczególnych klasach. Ale fakt, że mają nosy, jest określony w interfejsie.

Przeczytaj – powody, dla których Laravel jest najlepszym frameworkiem PHP w 2018 roku

Jak korzystać z klas abstrakcyjnych

Klasa abstrakcyjna jest dokładnie jak interfejs. Jednak w przeciwieństwie do interfejsu, metody i funkcje mogą być faktycznie definiowane i inicjowane, ale nie muszą. Co więcej, zamiast klas implementujących klasy abstrakcyjne, czynią klasę abstrakcyjną nadklasą. W rzeczywistości jest to główna wada klas abstrakcyjnych w porównaniu z interfejsami, ponieważ klasa może implementować tyle interfejsów, ile chce, ale może mieć tylko jedną nadklasę, co oznacza, że ​​klasa może wykorzystywać tylko jedną klasę abstrakcyjną, ale wiele interfejsów.

Klasy abstrakcyjne są świetne. Jednak jeśli istnieją pewne identyczne cechy, które mają identyczne sposoby realizacji. Ale jeśli są też takie, które mają różne implementacje w obiektach. Na przykład, jeśli masz dwie klasy, mężczyzn i kobiety, i chcesz zdefiniować podobieństwa między nimi, najlepszym rozwiązaniem może być użycie klasy abstrakcyjnej. Czemu? Ponieważ pewne cechy między płciami są identyczne i są realizowane dokładnie w ten sam sposób. Na przykład usta są mniej więcej tej samej wielkości i służą temu samemu celowi; oczy są mniej więcej tej samej wielkości i funkcjonują tak samo u płci itp.

Tak więc dla tych cech funkcje lub metody je definiujące można zainicjować w klasie abstrakcyjnej. Jednak pewne cechy, takie jak biodra lub brwi, są obecne u obu płci. Ale te cechy różnią się znacznie między nimi. Dlatego klasa abstrakcyjna nie zainicjuje metod lub funkcji definiujących te cechy. I zostawię to podklasom.

Streszczenie

Miejmy nadzieję, że te wyjaśnienia nie były zbyt mylące ani rozwlekłe. Jeśli jesteś nowy w programowaniu, nie martw się, jeśli nadal jesteś zdezorientowany. Istnieje wiele dostępnych zasobów, których możesz użyć, aby zrozumieć podstawy programowania i subtelne różnice między niektórymi terminami.

Bardzo ważne jest, aby wspomnieć, że jeśli chcesz zostać profesjonalnym programistą. Opieranie się zarówno na koncepcjach programowania proceduralnego, jak i programowania obiektowego (OOP) jest koniecznością. W rzeczy samej. Wielu inżynierów oprogramowania używa Unified Model Language do mapowania wymagań projektu lub aplikacji na obiekty i diagramy, zanim zaczną kodować OOP. Istnieje wiele zasobów online do nauki inżynierii oprogramowania. Dla nastolatków i uczniów szkół średnich High School Technology Services oferuje różnorodne praktyczne szkolenia. Dla dorosłych i profesjonalistów Coding Bootcamps Institute oferuje wiele podstawowych i zaawansowanych zajęć z programowania, skupiających się zarówno na kodowaniu proceduralnym, jak i OOP.

o autorze

Matt Zand jest programistą, biznesmenem, konsultantem IT i pisarzem. Jest założycielem i właścicielem Grupy WEG2G. Jest także założycielem DC Web Makers. Jego hobby to wędrówki, jazda na rowerze, zajęcia na świeżym powietrzu, podróże i wspinaczka górska.