OOP. Wstęp.

PHP Programowanie dodano: 26.05.2019
EDYCJA 29.05.2019

PARADYGMAT
  1. PROGRAMOWANIE PROCEDURALNE P. PROGRAMOWANIA ZALECAJĄCY DZIELENIE KODU NA PODPROGRAMY (FRAGMENTY) WYKONUJĄCE ŚCIŚLE OKRESLONE OPERACJE.
  2. PROGRAMOWANIE OBIEKTOWE ZBIÓR OBIEKTÓW KOMUNIKUJĄCYCH SIĘ ZE SOBĄ W CELU WYKONANIA ZADAŃ.
AKSJOMATY
  • NAZWY KLAS POWINNY BYĆ RZECZOWNIKKAMI, EW. PRZYMIOTNIK + RZECZOWNIK - OPISUJĄ JAKIŚ PRZEDMIOT.
  • NAZWY METOD POWINNY BYĆ CZASOWNIKAMI, RZADZIEJ RZECZOWNIKAMI, OPISUJĄ JAKĄŚ CZYNNOŚĆ NA RZECZ OBIEKTU.
  • NAZWY INTERFEJSU POWINNY BYC PRZYMIOTNIKAMI, GDYŻ OPISUJĄ ZDOLNOŚĆ DO CZEGOŚ LUB RZECZOWNIKAMI.
PROGRAMOWANIE OBIEKTOWE
  1. ABSTRAKCJA IDEA, KONCEPCJA
  2. ENKAPSULACJA - HERMETYZACJA Zasięg widoczności zmiennej. Dla dodatkowej kontroli nad obiektami, klasami i właściwościami. Zewnętrzne klasy mogą zmodyfikować stan/dane w obiekcie. Public (wszystkie) / private (tylko obecna klasa) / protected (obecna i dziedziczące)
  3. DZIEDZICZENIE MECHANIZM WSPÓŁDZIELENIA FUNKCJONALNOŚCI POMIĘDZY KLASAMI NP. ADMINISTRATOR TO WARIANT UŻYTKOWNIKA; MA NOWE WŁAŚCIWOŚCI, WIELE KLAS POCHODNYCH LUB POZIOMÓW DZIEDZICZENIA.
  4. POLIMORFIZM MOŻLIWOŚĆ TRAKTOWANIA JEDNEGO OBIEKTU JAK INNEGO OBIEKTU. WARTOŚCI RÓŻNYCH TYPÓW OBSŁUGUJEMY ZA POMOCĄ WSPÓLNEGO INTERFEJSU.

  • AKCESOR METODY DOSTĘPOWE. Hermetyzacja. Publiczna metoda mająca dostęp do prywatnych składników (logika, która chroni składniki private np. pass: gettery i settery (odczytują lub zmieniają wartości)
  • DESTRUKTOR niszczy obiekt, ale działa na końcu pliku.
    unset($obiekt) niszczy obiekt w danym miejscu w kodzie i wywołuje destruktor.
  • FINAL klasa lub metoda nie może zostać odziedziczona (klasa) lub przysłonięta (metda). FINAL nie dotyczy SKŁADOWYCH i ZMIENNYCH.
    1. final class Owczarek extends Dog { ... }
    2. class Article {
    3. final public function getId(){
    4. return $this -> id;
    5. }
    6. }
    7. Article::getId();
  • INSTANCJA OBIEKT danej klasy.
  • INTERFEJS struktura, która zawiera same deklaracje abstrakcyjnych metod publicznych, bez definiowania ich ciał. Idziemy o krok wyżej od z uogólnieniem klasy abstrakcyjnej. Gdy KLASA IMPLEMENTUJE interfejs musi zawierać wszystkie METODY interfejsu. Jedna klasa może implementować wiele interfejsów.
    1. interface A { ... }
    2. interface B { ... }
    3. class C implements A, B {... }
  • METODA funkcja wewnątrz klasy wywołana na rzecz obiektu.
  • METODY MAGICZNE __construct() , destruct(), __toString(), __get, __set, unset(), __isset() , np. do wyprowadzania właściwości klasy bez błędu na stronie. Do sprawdzania, czy klasa zaimplementowana do aplikacji działa jak należy: czy ustawia jakieś zmienne członkowskie. Np. public function __isset($name){ ... }. Do testowania aplikacji.
  • METODA STATYCZNA (lub ZMIENNA STATYCZNA) z regóły służy do obsługi składowych statycznych klas, metoda która nie operuje na strukturze klasy (NIE DEKLARUJEMY i NIE INICJALIZUJEMY obiektu
  • KLASA abstrakcyjny opis właściwości (zestaw atrybutów) i metod obiektu
  • KLASA ABSTRAKCYJNA gdy klasa bazowa jest na tyle ogólna, że nie powinno się tworzyć jej obiektu. Służy jako podstawa dla swoich klas specjalizujących, MUSI zawierać deklarację (nie definicję) METOD ABSTRAKCYJNYCH, może zawierać deklarację lub definicję jakiś metod. Klasy dziedziczące muszą posiadać definicje (ciało) zdefiniowanych wcześniej metod abstrakcyjnych.
    1. abstract class Animal{
    2. protected $name;
    3. public function __construct( $name){
    4. $this->name = $name;
    5. }
    6. final public function getName(){
    7. return $name;
    8. }
    9. abstract public function roar();
    10.  
    11. }
    12. class Cat extends Animal{
    13. public function __construct( $name){
    14. parent::__construct($name);
    15. }
    16. public function roar(){
    17. echo 'mrrr mrrr';
    18. }
    19. }
  • MAGICZNE STAŁE __LINE__ , __FILE__ , __DIR__ , __CLASS__ , __FUNCTION__ , __METHOD__ , __NAMESPACE__
  • OBIEKTreprezentant KLASY. INSTANCJA KLASY. Dający wyodrębnić się fragment rzeczywistości. Element łączący w sobie STANczyli dane zwane POLAMI oraz zachowania, czyli metody. Metody (zachowania) + DANE (atrybuty)
    OBIEKT Artykuł | autor: "Jan Nowak" | tytuł: "..." | opublikowano: "TAK" | opublikuj(); usuń();
  • OPERATOR $this odwołuje się do bieżącej instancji. REFERENCJA
  • OPERATOR $self dla klasy jest tym, co operator $this dla obiektu.
  • OPERATOR ZAKRESU :: dostęp do ZMIENNEJ, METODY STATYCZNEJ, STAŁEJ dla KLASY. Mówi, że dana metoda jest częścią składowa podanej klasy, mówi do której klasy należy ta funkcja.
    Pytanie::wczytaj();
    $obiekt = DateTime::createFromForm
  • PARENT::aby dodać nową funkcjonalność do odziedziczonej metody, zachowując orginalną metodę. Dostęp do zmiennych członkowskich klasy nadrzędnej z klasy dziedziczącej
    1. class X extends Y{
    2. public function __construct(){
    3. parent:: __construct();
    4. echo __CLASS__;
    5. }
    6. }
  • PROTECTED odwołanie z klasy dziedziczącej tylko gry funkcja jest protected.
  • PRZYSŁANIANIE METOD gdy mamy potrzebę lekkiej modyfikacji lub całkowitej zmiany metody w podklasie - powtórna definicja w podklasach. !metody publicznej nie można przysłonić met. prywatną, odwrotnie tak (met. prywatną można przysłonić et. prywatną lub chronioną)
    1. abstract class Dog{
    2. private $name;
    3. public function __construct($name){
    4. $this->name = $name;
    5. }
    6. public function getName(){
    7. return $this->name;
    8. }
    9. }
    10. class Basset extends Dog{
    11. public function setName($name){ // ***
    12. parent::setName('Jamnik'.$name);
    13. }
    14. }
    15. // ***
    16. public function x(){
    17. parent::y();
    18. return parent::x();
    19. }
  • STAN zmienna
  • STATYCZNIE Metoda lub właściwość: dostęp do nich bez tworzenia instancji klasy. NazwaKlasy::nazwaMetody();
    SKŁADOWA: NazwaKlasy::NazwaSkladowej;
    1. class Math {
    2. public static function add($x, $y){
    3. return $x + $y;
    4. }
    5. echo Math::add(2, 5);
  • STAŁE KLASOWE dostęp jest podobny do publicznych składowych statycznych. Różnica: nazwy stałych są bez znaku $ i ich wartości nie można zmieniać.
    1. abstract class Dog{
    2. const TYPE = "pies";
    3. }
    4. echo Dog::TYPE;
  • ZMIENNA LOKALNA widoczna tylko w ciele funkcji - wewnątrz funkcji.
  • ZMIENNA GLOBALNA zdefiniowania poza ciałem funkcji, dostępna dla każdej funkcji.
    Różnice między interfejsem, a klasą abstrakcyjną
  1. klasa może implementować wiele interfejsów, ale rozszerzać tylko jednego rodzica
  2. metody w interfejsie są publiczne, w klasie publiczne lub chronione
  3. interfejs może zawierać tylko deklaracje metod, a klasa też metody zdefiniowane klasy abstrakcyjne mogą zawierać atrybuty(pola), interfejsy nie
  4. w interfejsach wszystkie metody są abstrakcyjne, natomiast w klasie abstrakcyjnej można stworzyć metody posiadające ciało, jak i abstrakcyjne
  5. klasa abstrakcyjna zazwyczaj jest ściśle związana z klasami dziedziczącymi w sensie logicznym, czyli np. tworzymy klasę abstrakcyjną Planeta po której dziedziczą konkretne klasy planet (np. Ziemia, Mars). Interfejs natomiast nie musi być już tak mocno związany z daną klasą, on określa jej cechy, np możesz stworzyć interfejs Zniszczalny, który mówi że dany obiekt może zostać zniszczony. Taki interfejs możesz nadać zarówno klasą Planeta, Gwiazda, Budynek itp.
  6. interfejs może dziedziczyć jedynie po innych interfejsach, a klasa abstrakcyjna może dziedziczyć po klasach abstrakcyjnych, interfejsach a nawet zwykłych klasach
  7. interfejs nie może mieć konstruktora, w klasie abstrakcyjnej możemy dostarczyć implementację konstruktora domyślnego


Losowe zdjęcia


O sobie


gawronski
A.D. 2016

Lubię jazdę na rowerze, wspinaczkę, czytać książki i biegać. Studiowałem mechanikę i budowę maszyn oraz psychologię. Nie zostałem inżynierem ani psychologiem.