Pokazywanie postów oznaczonych etykietą PHP_wzorce_projektowe. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą PHP_wzorce_projektowe. Pokaż wszystkie posty

środa, 18 stycznia 2017

[PHP][OOP] Abstrakcja, interfejsy i wzorzec Factory

TRUE
4704597062652094618
Aktualizacja: 20.01.2017 15:00. Większość początkujących w programowaniu obiektowym programistów ma problemy ze zrozumieniem w jaki sposób prawidłowo wykorzystywać mechanizmy takie jak dziedziczenie, abstrakcje i interfejsy. Różne tutoriale, czy poradniki dostępne w sieci nie ułatwiają tego, gdyż zwykle opisują one jedynie zasadę działania tych mechanizmów, bez pokazania praktycznego tego zastosowania - do takiej wiedzy trzeba już sięgnąć do książek, ale i te nierzadko traktują sprawę po macoszemu. O ile koncepcja tego wszystkiego jest prosta, to dużo ludzi ma na początku problemy z wyczuciem tego w jaki sposób prawidłowo wykorzystywać to w praktyce. Początkujący programiści jedynie wiedzą, że takie coś jest, ale nie bardzo są w stanie zrozumieć, do czego to wszystko tak naprawdę może posłużyć. W tym artykule przeanalizujemy sobie więc do czego tak naprawdę użyć tych wszystkich mechanizmów i sprawimy, że słowo abstrakcja nie będzie się już kojarzyć nikomu z żadną czarną magią, tudzież z czymś trudnym do zrozumienia. Dzisiaj zaprzyjaźnimy się z ową abstrakcją..

Czym tak naprawdę jest abstrakcja?

Na pewno wiecie, czym są klasy abstrakcyjne, a przynajmniej jak takie klasy definiujemy. Jak wiadomo klasy abstrakcyjne definiujemy za pomocą abstract class, następnie podajemy w definicji klasy metody abstrakcyjne, które będą musiały zostać pokryte we wszystkich (tym razem już nie-abstrakcyjnych) klasach dziedziczących po naszej nadrzędnej abstrakcyjnej klasie. Czym więc tutaj jest ta magiczna abstrakcja? Otóż wymusza ona niejako na wszystkich klasach potomnych utworzenie dokładnie takich metod, jakie w klasie bazowej (tej abstrakcyjnej) zostały określone. Klasa abstrakcyjna sama w sobie nie posiada definicji tychże metod, posiada jedynie ich deklaracje. Możemy więc powiedzieć, że do momentu utworzenia tych metod w klasach potomnych (dziedziczących) wszystkie te metody tak naprawdę nie istnieją, istnieją jedynie abstrakcyjnie. Niby są, a jednak jeszcze ich nie ma, gdyż istnieje dopiero póki co ich deklaracja, że takowe prawdopodobnie się gdzieś dalej w kodzie pojawią. Tym właśnie jest abstrakcja.

Przyjrzyjmy się najprostrzej klasie abstrakcyjnej:
[code]
<?php
abstract class AbstractHuman {

  // kod
}
[/code]
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji