SlideShare a Scribd company logo
1 of 34
PROGRAMOWANIE OBIEKTOWE
NA PRZYKŁADZIE JĘZYKA PHP
ORAZ PSR
KIM JESTEM I DLACZEGO
PROWADZĘ TO SZKOLNIE?
DLATEGO :)
PROGRAMOWANIE
OBIEKTOWE
Programowanie obiektowe jest jednym
z paradygmatów programowania. Jest
to próba przedstawienia rzeczywistości
i relacji w niej zachodzących za pomocą
obiektów i klas.
KLASA A OBIEKT
Klasa jest typem danych.
Typem danych może być np.
integer, string, boolean lub
klasa stworzona przez nas.
Klasa definiuje metody czyli
funkcjonalności oraz pola
(właściwości) czyli zmienne.
Czym jest obiekt? Jest to
instancja danej klasy, czyli
konkretna zmienna danego
typu.
KLASA
POLE
METODA
OBIEKT
4 POJĘCIA ZWIĄZANE Z
PROGRAMOWANIEM
OBIEKTOWYM
PROGRAMOWANIE
OBIEKTOWE
Abstrakcja
Dziedziczenie
Hermetyzacja
Polimorfizm
ABSTRAKCJA
Pojęcie w programowaniu
obiektowym najczyściej
utożsamiane z klasą. Jest
modelem, który w rzeczywistości
nie reprezentuje żadnego
istniejącego obiektu, a jedynie na
podstawie którego definiowane
są inne obiekty. Przykładem
może być ssak, lub zwierzę – nie
ma ich rzeczywistego obiektu, a
jedynie obiekty potomne
bazujące na ich własnościach.
POLIMORFIZM
Inaczej
wielopostaciowość,
metoda
pozwalająca funkcji
wirtualnej
przyjmować różne
sposoby jej
realizacji.
HERMETYZACJA
Czyli ukrywanie
implementacji,
enkapsulacja. Zapewnia, że
obiekt nie może zmieniać
stanu wewnętrznego innych
obiektów w nieoczekiwany
sposób. Tylko własne
metody obiektu są
uprawnione do zmiany jego
stanu (np. gettery i settery).
DZIEDZICZENIE
Porządkuje i wspomaga
polimorfizm i enkapsulację
dzięki umożliwieniu
definiowania i tworzenia
specjalizowanych obiektów na
podstawie bardziej ogólnych.
Dla obiektów specjalizowanych
nie trzeba redefiniować całej
funkcjonalności, lecz tylko tę,
której nie ma obiekt
ogólniejszy.
KLASY ABSTRAKCYJNE I
INTERFEJSY
KLASA ABSTRAKCYJNA
• Klasa abstrakcyjna jest to klasa której obiekty nie mogą być
tworzone, może być natomiast dziedziczona.
• Klasa abstrakcyjna może posiadać konstruktor jak i destruktor, mogą
być one jednak wywołane tylko przez klasy pochodne.
• Klasę abstrakcyjną tworzymy przy pomocy modyfikatora abstract
• Dodatkowo klasa abstrakcyjna może posiadać funkcje abstrakcyjne,
funkcja taka posiada listę argumentów, jednak nie posiada ciała.
• Funkcje abstrakcyjne muszą zostać nadpisane w klasach
pochodnych. Tworzone są one również modyfikatorem abstract
KLASA ABSTRAKCYJNA -
PRZYKŁADStworzyliśmy klasę
abstrakcyjną Animal która
posiada konstruktor i
funkcję abstrakcyjną.
Klasa Elephant która
dziedziczy klasę
abstrakcyjna Animal
nadpisuje funkcje
abstrakcyjna (musi to
zrobić), jak i wywołuje
konstruktor klasy
abstrakcyjnej w ciele
swojego konstruktora.
INTERFEJSY
• może mieścić jedynie metody, które z założenia są abstrakcyjne.
• wszystkie metody zawarte w interfejsie muszą zostać nadpisane w klasach
pochodnych.
• Przy pomocy interfejsów masz możliwość wymuszenia na klasach, aby
posiadały niezbędne do współpracy z innymi elementami metody, tak więc
interfejsy zapewniają określone cechy klasy.
• Interfejs tworzymy słowem kluczowym interface
• Klasy nie dziedziczą interfejsów, klasy je implementują, dokonujemy tego
używając modyfikatora implements po którym podajemy nazwy interfejsów do
zaimplementowania.
• Do danej klasy możemy implementować dowolną ilość interfejsów.
INTERFEJS - PRZYKŁAD
Stworzyliśmy dwa interfejsy,
Carnivorous i Herbivorous.
Interfejsy te posiadają
odpowiednio metody eatMeat
jak i eatVegetables. Tak więc
klasy implementujące je muszą
te metody nadpisać. Widzimy
że klasa Human implementuje
interfejs Carnivorous jak i
Herbivorous, taki sam efekt
moglibyśmy otrzymać
implementując interfejs
Omnivorous który dziedziczy
po Carnivorous i Herbivorous.
WZORCE PROJEKTOWE
Wzorzec projektowy (ang. design
pattern) – uniwersalne, sprawdzone w
praktyce rozwiązanie często
pojawiających się, powtarzalnych
problemów projektowych. Pokazuje
powiązania i zależności pomiędzy klasami
oraz obiektami i ułatwia tworzenie,
modyfikację oraz pielęgnację kodu
źródłowego.
SINGLETON
Singleton jest jednym z najprostszych
wzorców projektowych. Jego celem jest
ograniczenie możliwości tworzenia obiektów
danej klasy do jednej instancji oraz
zapewnienie globalnego dostępu do
stworzonego obiektu – jest to obiektowa
alternatywa dla zmiennych globalnych.
PRZYKŁAD
Klasa Config zawiera tablicę z
podstawowymi ustawieniami
aplikacji. Dzięki zastosowaniu
Singletona zmiana ustawień w
jednym miejscu (np. zmiana języka
na stronie przez użytkownika) jest
„widoczna” w każdym miejscu
aplikacji. Ponadto można łatwo
zaprojektować klasę z konfiguracją,
tak by było można łatwo dodawać
kolejne ustawienia w miarę potrzeb.
‚pl’
‚en’
PROTOTYP
Prototyp jest wzorcem, opisującym mechanizm tworzenia
nowych obiektów poprzez klonowanie jednego obiektu
macierzystego. Mechanizm klonowania wykorzystywany
jest wówczas, gdy należy wykreować dużą liczbę
obiektów tego samego typu lub istnieje potrzeba
tworzenia zbioru obiektów o bardzo podobnych
właściwościach. Wzorzec Prototype można stosować w
sytuacjach, gdy tworzona jest duża liczba obiektów tego
samego typu. Stosuje się go głównie w celach
optymalizacji, gdyż klonowanie obiektu jest szybsze niż
jego stworzenie.
PRZYKŁADKlasa abstrakcyjna Book zawiera
pola title i topic, metody publiczne
(gettery i settery) oraz metodę
abstrakcyjną clone. Klasy PHPBook i
JAVABook rozszerzają klasę Book.
Konstruktory tych klas ustawiają
wartości dla pola topic.
Kat. JAVA, Tytuł: Książka 1
Kat. JAVA, Tytuł: Książka
1
Kat. JAVA, Tytuł: Książka 2
Kat. PHP, Tytuł: Książka 1
INNE WZORCE
PSR
Czyli PHP Standard Recommendations
PHP-FIG
PHP Framework Interop Group - grupa
miłośników języka PHP. Zajmują się oni
standaryzacją koncepcji programowania w
języku PHP. W skład tej grupy wchodzą
między innymi twórcy frameworków takich jak
Symfony, Codigniter itp.
PSR-1 — PODSTAWOWY
STYL KODOWANIA• Kod PHP musi znajdować się między znacznikami <?php ?> lub <?= ?> . Nie można stosować żadnych innych
znaczników do oznaczania skryptów PHP.
• Wszystkie pliki PHP muszą używać kodowania UTF-8 bez znaku kolejności bajtów (BOM). Wydaje się, że
spełnienie tego wymogu jest skomplikowane, ale w rzeczywistości edytory tekstu i środowiska programistyczne
załatwiają to automatycznie
• Pojedynczy plik PHP może definiować symbole (klasę, cechę, funkcję, stałą itd.) lub wykonywać czynność
powodującą skutki uboczne (np. tworzyć dane wyjściowe albo manipulować danymi). Plik PHP nie powinien
pełnić dwóch typów ról jednocześnie. Spełnienie tego wymogu nie jest trudne i wymaga jedynie nieco
planowania ze strony programisty
• Przestrzenie nazw (Namespaces) i klasy muszą spełniać wymogi standardu PSR-4. Programista ze swojej
strony musi tylko wybrać odpowiednie nazwy dla swoich symboli PHP i zadbać o to, aby zawierające ich
definicje pliki znajdowały się w odpowiednich miejscach.
• Nazwy klas PHP muszą być zgodne z NotacjąWielbłądzią czyli CamelCase lub TitleCase.
• Nazwy stałych w PHP należy zapisywać wielkimi literami, a do oddzielania słów używa się znaków
podkreślenia, np.: SUPER_PARTIA_KURWO
• Nazwy metod powinny być zgodne z taką notacjąWielbłądzią, tzn. pierwsza litera powinna być mała, a
pierwsze litery kolejnych wyrazów powinny być wielkie, np.: phpJestŚwietny
PSR-2 — RESTRYKCYJNY
STYL KODOWANIA
• Jednym z wymogów standardu PSR-2 jest zaadaptowanie wymagań
standardu PSR-1.
• Wcięcia muszą mieć wielkość 4 spacji
• Pliki PHP muszą kończyć się pustym wierszem oraz nie mogą mieć na
końcu znacznika ?>. Żaden wiersz kodu nie powinien być dłuższy niż
80 znaków. Żaden wiersz kodu nie może być dłuższy niż 120 znaków.
Na końcu wiersza kodu nie może być białych znaków
• zaleca się, aby wszystkie słowa kluczowe PHP pisać małymi literami np.
null, true, false
PSR-2 - NAMESPACES
Za każdą deklaracją
przestrzeni nazw powinien
znajdować się jeden pusty
wiersz. Także po bloku
instrukcji importu lub
tworzących aliasy
przestrzeni nazw za
pomocą słowa kluczowego
usenależy zostawić jeden
wiersz pusty.
PSR-2 - KLASY
Rekomendacja PSR-2 stanowi,
że znak otwarcia klamry musi
znajdować się w nowym
wierszu, bezpośrednio pod
nazwą tej klasy. Znak
zamknięcia klamry definicji
klasy również musi znajdować
się w osobnym wierszu, za
definicją klasy. Jeśli tworzona
klasa rozszerza inną klasę lub
implementuje interfejs, słowa
kluczowe extends i implements
muszą znajdować się w tym
samym wierszu co nazwa
klasy:
PSR-2 - METODY
Zasady dotyczące umiejscowienia
znaków otwarcia i zamknięcia klamry
są takie same jak dla klas. Znak
otwierający klamrę definicji metody
musi znajdować się w nowym wierszu
bezpośrednio za nazwą metody. Znak
zamykający należy umieścić w
nowym wierszu bezpośrednio za
ostatnią linijką definicji metody.
Szczególną uwagę trzeba poświęcić
argumentom. Za nawiasem
otwierającym i przed zamykającym
nie powinno być żadnych białych
znaków. Po każdym argumencie
oprócz ostatniego znajduje się
przecinek i jedna spacja
PSR-2 - WARUNKI I PĘTLE
Po każdym słowie kluczowym
konstrukcji sterującej musi
znajdować się jedna spacja. Słowa
kluczowe konstrukcji sterujących to: if,
elseif, else, switch, case, while, do
while, for, foreach, try, catch. Jeżeli po
słowie kluczowym musi znajdować się
nawias, to po znaku otwierającym i
przed znakiem zamykającym nie może
być białych znaków. W odróżnieniu
od definicji klas i metod, znak otwarcia
klamry powinien znajdować się za
słowem kluczowym i w tym samym
wierszu co to słowo. Znak zamknięcia
klamry musi znajdować się w
osobnym wierszu.
PSR-4 — AUTOMATYCZNE
WCZYTYWANIE
ZALEŻNOŚCICzwarta rekomendacja PHP-FIG opisuje
standardową strategię działania programu do
automatycznego wczytywania zależności
(autoloadera). Strategia ta polega na znajdowaniu klas
PHP, interfejsów lub cech i wczytywaniu ich do
interpretera PHP na żądanie w czasie działania
programu. Komponenty PHP i systemy szkieletowe
zgodne ze standardem PSR-4 mogą być lokalizowane
i wczytywane do interpretera PHP tylko przez jeden
autoloader
PSR-4 — AUTOMATYCZNE
WCZYTYWANIE
ZALEŻNOŚCI• PSR-4 opisuje strategię lokalizowania i
wczytywania klas, interfejsów i cech PHP
podczas działania programu. Rekomendacja ta
nie wymaga zmiany aktualnej implementacji
kodu, tylko sugeruje organizację kodu w
katalogach i przestrzeniach nazw. Strategia
PSR-4 wykorzystuje przestrzenie nazw i katalogi
do lokalizowania i wczytywania klas, interfejsów i
cech.
DZIĘKUJĘ ZA UWAGĘ !

More Related Content

What's hot

Divergência e Convergência
Divergência e ConvergênciaDivergência e Convergência
Divergência e ConvergênciaAna Paula Garcia
 
Regras de segurança no laboratório
Regras de segurança no laboratórioRegras de segurança no laboratório
Regras de segurança no laboratóriobelavideira
 
004 aminoacido
004 aminoacido004 aminoacido
004 aminoacidoRaul Tomé
 
A+origem+da+vida+e+a+evolução
A+origem+da+vida+e+a+evoluçãoA+origem+da+vida+e+a+evolução
A+origem+da+vida+e+a+evoluçãoRichele Soares
 
75 exemplos de Modelagem e Prototipagem de negócios Inovadores
75 exemplos de Modelagem e Prototipagem de negócios Inovadores75 exemplos de Modelagem e Prototipagem de negócios Inovadores
75 exemplos de Modelagem e Prototipagem de negócios InovadoresJoão Paulo Nogueira
 
identif de grupos funcionais 11.pptx
identif de grupos funcionais 11.pptxidentif de grupos funcionais 11.pptx
identif de grupos funcionais 11.pptxmarciojosefariasdasi
 
Fundamentos da inovação
Fundamentos da inovaçãoFundamentos da inovação
Fundamentos da inovaçãoinnoscience_
 
Plano de Ensino Cadeias Produtivas
Plano de Ensino Cadeias ProdutivasPlano de Ensino Cadeias Produtivas
Plano de Ensino Cadeias ProdutivasFaculdadeCNA
 
V.1 Introdução a ecologia
V.1 Introdução a ecologiaV.1 Introdução a ecologia
V.1 Introdução a ecologiaRebeca Vale
 
Aula propriedades coligativas
Aula propriedades coligativasAula propriedades coligativas
Aula propriedades coligativasquiandreaivina
 
Sais Minerais e Vitaminas
Sais Minerais e VitaminasSais Minerais e Vitaminas
Sais Minerais e VitaminasKelly Gonzatto
 

What's hot (20)

Divergência e Convergência
Divergência e ConvergênciaDivergência e Convergência
Divergência e Convergência
 
Regras de segurança no laboratório
Regras de segurança no laboratórioRegras de segurança no laboratório
Regras de segurança no laboratório
 
Gestão da qualidade
Gestão da qualidadeGestão da qualidade
Gestão da qualidade
 
004 aminoacido
004 aminoacido004 aminoacido
004 aminoacido
 
Ecologia
EcologiaEcologia
Ecologia
 
A+origem+da+vida+e+a+evolução
A+origem+da+vida+e+a+evoluçãoA+origem+da+vida+e+a+evolução
A+origem+da+vida+e+a+evolução
 
75 exemplos de Modelagem e Prototipagem de negócios Inovadores
75 exemplos de Modelagem e Prototipagem de negócios Inovadores75 exemplos de Modelagem e Prototipagem de negócios Inovadores
75 exemplos de Modelagem e Prototipagem de negócios Inovadores
 
Slide empreendedorismo
Slide empreendedorismoSlide empreendedorismo
Slide empreendedorismo
 
identif de grupos funcionais 11.pptx
identif de grupos funcionais 11.pptxidentif de grupos funcionais 11.pptx
identif de grupos funcionais 11.pptx
 
Refino de Petróleo
Refino de PetróleoRefino de Petróleo
Refino de Petróleo
 
#1 introdução a termodinâmica conceitos básicos
#1 introdução a termodinâmica   conceitos básicos#1 introdução a termodinâmica   conceitos básicos
#1 introdução a termodinâmica conceitos básicos
 
5.operacoes unitarias slides
5.operacoes unitarias slides5.operacoes unitarias slides
5.operacoes unitarias slides
 
Hidrostática (versão 2018)
Hidrostática (versão 2018)Hidrostática (versão 2018)
Hidrostática (versão 2018)
 
Aula vidrarias
Aula vidrariasAula vidrarias
Aula vidrarias
 
Fundamentos da inovação
Fundamentos da inovaçãoFundamentos da inovação
Fundamentos da inovação
 
Plano de Ensino Cadeias Produtivas
Plano de Ensino Cadeias ProdutivasPlano de Ensino Cadeias Produtivas
Plano de Ensino Cadeias Produtivas
 
V.1 Introdução a ecologia
V.1 Introdução a ecologiaV.1 Introdução a ecologia
V.1 Introdução a ecologia
 
ISO9001 - Aplicação prática no Setor da Construção Civil
ISO9001 -  Aplicação prática no Setor da Construção Civil               ISO9001 -  Aplicação prática no Setor da Construção Civil
ISO9001 - Aplicação prática no Setor da Construção Civil
 
Aula propriedades coligativas
Aula propriedades coligativasAula propriedades coligativas
Aula propriedades coligativas
 
Sais Minerais e Vitaminas
Sais Minerais e VitaminasSais Minerais e Vitaminas
Sais Minerais e Vitaminas
 

Similar to Programowanie obiektowe na przykładzie języka PHP oraz PSR

Programowanie obiektowe na przykładzie języka PHP oraz PSR
Programowanie obiektowe na przykładzie języka PHP oraz PSRProgramowanie obiektowe na przykładzie języka PHP oraz PSR
Programowanie obiektowe na przykładzie języka PHP oraz PSRInterSynergy
 
PSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistycznePSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistyczneAurora Creation
 
PSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistycznePSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistycznePHPstokPHPstok
 
Refaktoryzacja kodu w języku PHP
Refaktoryzacja kodu w języku PHPRefaktoryzacja kodu w języku PHP
Refaktoryzacja kodu w języku PHPDevCastZone
 
Klasa-objekt-Relacja-generalizacji.pptx
Klasa-objekt-Relacja-generalizacji.pptxKlasa-objekt-Relacja-generalizacji.pptx
Klasa-objekt-Relacja-generalizacji.pptxVolodymyrBurmus
 
Tworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego koduTworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego kodupabloware
 
Object Calisthenics (ZOSIA, Przesieka 2017 PL)
Object Calisthenics  (ZOSIA, Przesieka 2017 PL)Object Calisthenics  (ZOSIA, Przesieka 2017 PL)
Object Calisthenics (ZOSIA, Przesieka 2017 PL)Grzegorz Byrka
 
Kurs VBA - elementy języka VBA cz.II
Kurs VBA - elementy języka VBA cz.IIKurs VBA - elementy języka VBA cz.II
Kurs VBA - elementy języka VBA cz.IICOGNITY Szkolenia
 

Similar to Programowanie obiektowe na przykładzie języka PHP oraz PSR (9)

Programowanie obiektowe na przykładzie języka PHP oraz PSR
Programowanie obiektowe na przykładzie języka PHP oraz PSRProgramowanie obiektowe na przykładzie języka PHP oraz PSR
Programowanie obiektowe na przykładzie języka PHP oraz PSR
 
PSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistycznePSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistyczne
 
PSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistycznePSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistyczne
 
Refaktoryzacja kodu w języku PHP
Refaktoryzacja kodu w języku PHPRefaktoryzacja kodu w języku PHP
Refaktoryzacja kodu w języku PHP
 
Klasa-objekt-Relacja-generalizacji.pptx
Klasa-objekt-Relacja-generalizacji.pptxKlasa-objekt-Relacja-generalizacji.pptx
Klasa-objekt-Relacja-generalizacji.pptx
 
Tworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego koduTworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego kodu
 
Delegaty i kolekcje
Delegaty i kolekcjeDelegaty i kolekcje
Delegaty i kolekcje
 
Object Calisthenics (ZOSIA, Przesieka 2017 PL)
Object Calisthenics  (ZOSIA, Przesieka 2017 PL)Object Calisthenics  (ZOSIA, Przesieka 2017 PL)
Object Calisthenics (ZOSIA, Przesieka 2017 PL)
 
Kurs VBA - elementy języka VBA cz.II
Kurs VBA - elementy języka VBA cz.IIKurs VBA - elementy języka VBA cz.II
Kurs VBA - elementy języka VBA cz.II
 

Programowanie obiektowe na przykładzie języka PHP oraz PSR

  • 2. KIM JESTEM I DLACZEGO PROWADZĘ TO SZKOLNIE?
  • 4. PROGRAMOWANIE OBIEKTOWE Programowanie obiektowe jest jednym z paradygmatów programowania. Jest to próba przedstawienia rzeczywistości i relacji w niej zachodzących za pomocą obiektów i klas.
  • 5. KLASA A OBIEKT Klasa jest typem danych. Typem danych może być np. integer, string, boolean lub klasa stworzona przez nas. Klasa definiuje metody czyli funkcjonalności oraz pola (właściwości) czyli zmienne. Czym jest obiekt? Jest to instancja danej klasy, czyli konkretna zmienna danego typu. KLASA POLE METODA OBIEKT
  • 6. 4 POJĘCIA ZWIĄZANE Z PROGRAMOWANIEM OBIEKTOWYM PROGRAMOWANIE OBIEKTOWE Abstrakcja Dziedziczenie Hermetyzacja Polimorfizm
  • 7. ABSTRAKCJA Pojęcie w programowaniu obiektowym najczyściej utożsamiane z klasą. Jest modelem, który w rzeczywistości nie reprezentuje żadnego istniejącego obiektu, a jedynie na podstawie którego definiowane są inne obiekty. Przykładem może być ssak, lub zwierzę – nie ma ich rzeczywistego obiektu, a jedynie obiekty potomne bazujące na ich własnościach.
  • 9. HERMETYZACJA Czyli ukrywanie implementacji, enkapsulacja. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko własne metody obiektu są uprawnione do zmiany jego stanu (np. gettery i settery).
  • 10. DZIEDZICZENIE Porządkuje i wspomaga polimorfizm i enkapsulację dzięki umożliwieniu definiowania i tworzenia specjalizowanych obiektów na podstawie bardziej ogólnych. Dla obiektów specjalizowanych nie trzeba redefiniować całej funkcjonalności, lecz tylko tę, której nie ma obiekt ogólniejszy.
  • 12. KLASA ABSTRAKCYJNA • Klasa abstrakcyjna jest to klasa której obiekty nie mogą być tworzone, może być natomiast dziedziczona. • Klasa abstrakcyjna może posiadać konstruktor jak i destruktor, mogą być one jednak wywołane tylko przez klasy pochodne. • Klasę abstrakcyjną tworzymy przy pomocy modyfikatora abstract • Dodatkowo klasa abstrakcyjna może posiadać funkcje abstrakcyjne, funkcja taka posiada listę argumentów, jednak nie posiada ciała. • Funkcje abstrakcyjne muszą zostać nadpisane w klasach pochodnych. Tworzone są one również modyfikatorem abstract
  • 13. KLASA ABSTRAKCYJNA - PRZYKŁADStworzyliśmy klasę abstrakcyjną Animal która posiada konstruktor i funkcję abstrakcyjną. Klasa Elephant która dziedziczy klasę abstrakcyjna Animal nadpisuje funkcje abstrakcyjna (musi to zrobić), jak i wywołuje konstruktor klasy abstrakcyjnej w ciele swojego konstruktora.
  • 14. INTERFEJSY • może mieścić jedynie metody, które z założenia są abstrakcyjne. • wszystkie metody zawarte w interfejsie muszą zostać nadpisane w klasach pochodnych. • Przy pomocy interfejsów masz możliwość wymuszenia na klasach, aby posiadały niezbędne do współpracy z innymi elementami metody, tak więc interfejsy zapewniają określone cechy klasy. • Interfejs tworzymy słowem kluczowym interface • Klasy nie dziedziczą interfejsów, klasy je implementują, dokonujemy tego używając modyfikatora implements po którym podajemy nazwy interfejsów do zaimplementowania. • Do danej klasy możemy implementować dowolną ilość interfejsów.
  • 15. INTERFEJS - PRZYKŁAD Stworzyliśmy dwa interfejsy, Carnivorous i Herbivorous. Interfejsy te posiadają odpowiednio metody eatMeat jak i eatVegetables. Tak więc klasy implementujące je muszą te metody nadpisać. Widzimy że klasa Human implementuje interfejs Carnivorous jak i Herbivorous, taki sam efekt moglibyśmy otrzymać implementując interfejs Omnivorous który dziedziczy po Carnivorous i Herbivorous.
  • 17. Wzorzec projektowy (ang. design pattern) – uniwersalne, sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych problemów projektowych. Pokazuje powiązania i zależności pomiędzy klasami oraz obiektami i ułatwia tworzenie, modyfikację oraz pielęgnację kodu źródłowego.
  • 18. SINGLETON Singleton jest jednym z najprostszych wzorców projektowych. Jego celem jest ograniczenie możliwości tworzenia obiektów danej klasy do jednej instancji oraz zapewnienie globalnego dostępu do stworzonego obiektu – jest to obiektowa alternatywa dla zmiennych globalnych.
  • 19. PRZYKŁAD Klasa Config zawiera tablicę z podstawowymi ustawieniami aplikacji. Dzięki zastosowaniu Singletona zmiana ustawień w jednym miejscu (np. zmiana języka na stronie przez użytkownika) jest „widoczna” w każdym miejscu aplikacji. Ponadto można łatwo zaprojektować klasę z konfiguracją, tak by było można łatwo dodawać kolejne ustawienia w miarę potrzeb. ‚pl’ ‚en’
  • 20. PROTOTYP Prototyp jest wzorcem, opisującym mechanizm tworzenia nowych obiektów poprzez klonowanie jednego obiektu macierzystego. Mechanizm klonowania wykorzystywany jest wówczas, gdy należy wykreować dużą liczbę obiektów tego samego typu lub istnieje potrzeba tworzenia zbioru obiektów o bardzo podobnych właściwościach. Wzorzec Prototype można stosować w sytuacjach, gdy tworzona jest duża liczba obiektów tego samego typu. Stosuje się go głównie w celach optymalizacji, gdyż klonowanie obiektu jest szybsze niż jego stworzenie.
  • 21. PRZYKŁADKlasa abstrakcyjna Book zawiera pola title i topic, metody publiczne (gettery i settery) oraz metodę abstrakcyjną clone. Klasy PHPBook i JAVABook rozszerzają klasę Book. Konstruktory tych klas ustawiają wartości dla pola topic. Kat. JAVA, Tytuł: Książka 1 Kat. JAVA, Tytuł: Książka 1 Kat. JAVA, Tytuł: Książka 2 Kat. PHP, Tytuł: Książka 1
  • 23. PSR Czyli PHP Standard Recommendations
  • 24. PHP-FIG PHP Framework Interop Group - grupa miłośników języka PHP. Zajmują się oni standaryzacją koncepcji programowania w języku PHP. W skład tej grupy wchodzą między innymi twórcy frameworków takich jak Symfony, Codigniter itp.
  • 25. PSR-1 — PODSTAWOWY STYL KODOWANIA• Kod PHP musi znajdować się między znacznikami <?php ?> lub <?= ?> . Nie można stosować żadnych innych znaczników do oznaczania skryptów PHP. • Wszystkie pliki PHP muszą używać kodowania UTF-8 bez znaku kolejności bajtów (BOM). Wydaje się, że spełnienie tego wymogu jest skomplikowane, ale w rzeczywistości edytory tekstu i środowiska programistyczne załatwiają to automatycznie • Pojedynczy plik PHP może definiować symbole (klasę, cechę, funkcję, stałą itd.) lub wykonywać czynność powodującą skutki uboczne (np. tworzyć dane wyjściowe albo manipulować danymi). Plik PHP nie powinien pełnić dwóch typów ról jednocześnie. Spełnienie tego wymogu nie jest trudne i wymaga jedynie nieco planowania ze strony programisty • Przestrzenie nazw (Namespaces) i klasy muszą spełniać wymogi standardu PSR-4. Programista ze swojej strony musi tylko wybrać odpowiednie nazwy dla swoich symboli PHP i zadbać o to, aby zawierające ich definicje pliki znajdowały się w odpowiednich miejscach. • Nazwy klas PHP muszą być zgodne z NotacjąWielbłądzią czyli CamelCase lub TitleCase. • Nazwy stałych w PHP należy zapisywać wielkimi literami, a do oddzielania słów używa się znaków podkreślenia, np.: SUPER_PARTIA_KURWO • Nazwy metod powinny być zgodne z taką notacjąWielbłądzią, tzn. pierwsza litera powinna być mała, a pierwsze litery kolejnych wyrazów powinny być wielkie, np.: phpJestŚwietny
  • 26. PSR-2 — RESTRYKCYJNY STYL KODOWANIA • Jednym z wymogów standardu PSR-2 jest zaadaptowanie wymagań standardu PSR-1. • Wcięcia muszą mieć wielkość 4 spacji • Pliki PHP muszą kończyć się pustym wierszem oraz nie mogą mieć na końcu znacznika ?>. Żaden wiersz kodu nie powinien być dłuższy niż 80 znaków. Żaden wiersz kodu nie może być dłuższy niż 120 znaków. Na końcu wiersza kodu nie może być białych znaków • zaleca się, aby wszystkie słowa kluczowe PHP pisać małymi literami np. null, true, false
  • 27. PSR-2 - NAMESPACES Za każdą deklaracją przestrzeni nazw powinien znajdować się jeden pusty wiersz. Także po bloku instrukcji importu lub tworzących aliasy przestrzeni nazw za pomocą słowa kluczowego usenależy zostawić jeden wiersz pusty.
  • 28. PSR-2 - KLASY Rekomendacja PSR-2 stanowi, że znak otwarcia klamry musi znajdować się w nowym wierszu, bezpośrednio pod nazwą tej klasy. Znak zamknięcia klamry definicji klasy również musi znajdować się w osobnym wierszu, za definicją klasy. Jeśli tworzona klasa rozszerza inną klasę lub implementuje interfejs, słowa kluczowe extends i implements muszą znajdować się w tym samym wierszu co nazwa klasy:
  • 29. PSR-2 - METODY Zasady dotyczące umiejscowienia znaków otwarcia i zamknięcia klamry są takie same jak dla klas. Znak otwierający klamrę definicji metody musi znajdować się w nowym wierszu bezpośrednio za nazwą metody. Znak zamykający należy umieścić w nowym wierszu bezpośrednio za ostatnią linijką definicji metody. Szczególną uwagę trzeba poświęcić argumentom. Za nawiasem otwierającym i przed zamykającym nie powinno być żadnych białych znaków. Po każdym argumencie oprócz ostatniego znajduje się przecinek i jedna spacja
  • 30. PSR-2 - WARUNKI I PĘTLE Po każdym słowie kluczowym konstrukcji sterującej musi znajdować się jedna spacja. Słowa kluczowe konstrukcji sterujących to: if, elseif, else, switch, case, while, do while, for, foreach, try, catch. Jeżeli po słowie kluczowym musi znajdować się nawias, to po znaku otwierającym i przed znakiem zamykającym nie może być białych znaków. W odróżnieniu od definicji klas i metod, znak otwarcia klamry powinien znajdować się za słowem kluczowym i w tym samym wierszu co to słowo. Znak zamknięcia klamry musi znajdować się w osobnym wierszu.
  • 31. PSR-4 — AUTOMATYCZNE WCZYTYWANIE ZALEŻNOŚCICzwarta rekomendacja PHP-FIG opisuje standardową strategię działania programu do automatycznego wczytywania zależności (autoloadera). Strategia ta polega na znajdowaniu klas PHP, interfejsów lub cech i wczytywaniu ich do interpretera PHP na żądanie w czasie działania programu. Komponenty PHP i systemy szkieletowe zgodne ze standardem PSR-4 mogą być lokalizowane i wczytywane do interpretera PHP tylko przez jeden autoloader
  • 32. PSR-4 — AUTOMATYCZNE WCZYTYWANIE ZALEŻNOŚCI• PSR-4 opisuje strategię lokalizowania i wczytywania klas, interfejsów i cech PHP podczas działania programu. Rekomendacja ta nie wymaga zmiany aktualnej implementacji kodu, tylko sugeruje organizację kodu w katalogach i przestrzeniach nazw. Strategia PSR-4 wykorzystuje przestrzenie nazw i katalogi do lokalizowania i wczytywania klas, interfejsów i cech.
  • 33.