Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/



Podobne dokumenty
PHP 5 język obiektowy

Podstawy programowania III

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

10. Programowanie obiektowe w PHP5

Programowanie obiektowe

Programowanie obiektowe

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Oracle PL/SQL. Paweł Rajba.

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Enkapsulacja, dziedziczenie, polimorfizm

Dziedziczenie. dr Jarosław Skaruz

Dokumentacja do API Javy.

.NET Klasy, obiekty. ciąg dalszy

Wykład 8: klasy cz. 4

Programowanie obiektowe

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Instrukcja 3 PROGRAMOWANIE OBIEKTOWE

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

OBIEKTY PHP. G. Panuś

Polimorfizm. dr Jarosław Skaruz

1. Klasy i obiekty. 2. Definicja klasy

1 Atrybuty i metody klasowe

Programowanie obiektowe

Klasy abstrakcyjne, interfejsy i polimorfizm

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Klasy abstrakcyjne i interfejsy

Dziedziczenie. Tomasz Borzyszkowski

PARADYGMATY PROGRAMOWANIA Wykład 4

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Definiowanie własnych klas

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Zaawansowane programowanie w języku C++ Klasy w C++

Java: interfejsy i klasy wewnętrzne

Materiały do zajęć VII

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Java Język programowania

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie obiektowe i zdarzeniowe

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Programowanie obiektowe - 1.

Dziedziczenie jednobazowe, poliformizm

Wykład 4: Klasy i Metody

TEMAT : KLASY DZIEDZICZENIE

Interfejsy i klasy wewnętrzne

Programowanie w Internecie. Java

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Programowanie obiektowe

KLASY, INTERFEJSY, ITP

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Wykład 6: Dziedziczenie

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Wykład 7: Pakiety i Interfejsy

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Zaawansowane programowanie w C++ (PCP)

Aplikacje w środowisku Java

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Programowanie obiektowe

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

Technologie i usługi internetowe cz. 2

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Wykład 5: Klasy cz. 3

Programowanie obiektowe

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Programowanie obiektowe

Diagramy klas. dr Jarosław Skaruz

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe

Klasy cd. Struktury Interfejsy Wyjątki

PARADYGMATY PROGRAMOWANIA Wykład 2

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Aplikacje w środowisku Java

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie obiektowe

Programowanie 2. Język C++. Wykład 3.

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Programowanie obiektowe

Obiektowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012

Wykład 9: Polimorfizm i klasy wirtualne

Definicje klas i obiektów. Tomasz Borzyszkowski

Zaawansowane programowanie w C++ (PCP)

Podstawy programowania. Programowanie obiektowe

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Programowanie obiektowe

Języki i techniki programowania Ćwiczenia 2

Programowanie WEB Lista nr 10 (termin ) mgr inż. Adam Dudek

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Dziedziczenie jednobazowe, poliformizm, tablice wskaźników na obiekty

Pakiety i interfejsy. Tomasz Borzyszkowski

Programowanie 2. Język C++. Wykład 9.

Transkrypt:

Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i likwidacja obiektów Przypisania i klonowanie Dziedziczenie, klasy abstrakcyjne, interfejsy Metody magiczne, porównywanie obiektów - 2 -

Wprowadzenie Deklaracja klasy class Nazwa { // pola // metody } Nazewnictwo plików i składowanie Każda klasa powinna być w osobnym pliku Nazwa pliku Taka sama jak nazwa klasy ({NazwaKlasy}.php) Z prefiksem class (class.{nazwaklasy}.php) - 3 -

Wprowadzenie Nazewnictwo klas Nazwa powinny być z wielkiej litery Można poprzedzić odpowiednim prefiksem C klasy CS klasy statyczne I interfejsy W nazwie klasy nie mają znaczenia małe i wielkie litery (np. nie można zadeklarować klas a i A) Ale funkcja get_class($klasa) zwróci wartość poprawną np. dla Bob zwróci Bob (inaczej niż w PHP4, tam zwróciłoby bob) - 4 -

Wprowadzenie Obiekty tworzymy za pomocą operatora new <?php require_once("class.cdemo.php"); $demo=new CDemo();?> - 5 -

Automatyczne ładowanie Dawniej, na początku każdego skryptu był stos instrukcji require do załadowania plików z klasami W PHP5 jest mechanizm automatycznego ładowania pliku z klasą, gdy klasa jest użyta Mechanizm polega na wykonaniu funkcji autoload, która ma jeden parametr nazwa klasy Pytanie co wtedy, gdy chcemy hierarchizować strukturę katalogów, w której składowane są klasy Kwestia nazewnictwa Wyszukiwanie danego pliku (może być nieefektywne) Przykład: autoload.php - 6 -

Składowe klasy Zmienne klasy Dostęp do zmiennych: $this->zmienna; Zaleca się tworzenie metod dostępowych do zmiennych klasy (enkapsulacja danych): set{nazwazmiennej} i get{nazwazmiennej} Stałe klasy Deklaracja: const nazwa_stalej Dostęp: self::nazwa_stałej Przykład: const PI = 3.14; echo self::constant. "\n<br>"; - 7 -

Składowe klasy Metody Deklaracja metody jest podobna deklaracji funkcji class Demo { function drukowanie( $zmienna ) { } } Parametry metod mogą pobierać typy argumentów (tylko dla typów obiektowych) class Demo { function drukowanie( Napis $zmienna ) { } } - 8 -

Składowe klasy Składowe statyczne Tworzymy przez dodanie słowa static Związane z klasą nie z obiektami Dostęp jest poprzez operator :: Przykłady odwołań self::$zmienna self::metod() COsoba::$imie COsoba::getLiczbaOsob() - 9 -

Składowe klasy Składowe statyczne, przykład class CDatabase { private static $db=null; construct( $host, $user, $pass ) { if ( self::$db == NULL ) { self::$db=dbconnect( $host, $user, $pass ); } } Składowe finalne Deklarujemy przez dodanie słowa final Finalne mogą być klasy i metody Po takich klasach nie można dziedziczyć Metod nie można nadpisywać w klasach potomnych - 10 -

Widoczność składowych Mamy do dyspozycji trzy specyfikatory dostępu: public dostępne zewsząd protected dostępne tylko w klasach potomnych private dostępne tylko dla klasy w której występuje - 11 -

Konstruktory i tworzenie obiektów Deklaracja konstruktora construct( $parametry ) Nie ma przeciążania konstruktorów Można używać również konwencji nazw z PHP4 wyższy priorytet ma nowa konwencja ( construct) Wywoływanie Jeśli jest konstruktor, nie są wywoływane konstruktory klas bazowych Jeśli nie ma konstruktora, są wywoływane konstruktory klas bazowych - 12 -

Destruktory i likwidacja obiektów Deklaracja destruktora destruct() Obiekt jest usuwany gdy zakończy się skrypt zmienna znika z bieżącego zakresu zmiennej jawnie przypiszemy wartość pustą usuniemy zmienną za pomocą funkcji unset() usuwanie jest na podstawie tzw. licznika odwołań do obiektu Funkcja destruct jest bezparametrowa - 13 -

Destruktory i likwidacja obiektów Wywoływanie Jeśli jest destruktor, nie są wywoływane destruktory klas bazowych Jeśli nie ma destruktora, są wywoływane destruktory klas bazowych Destruktory przydają głównie do zamknięcia połączeń do baz danych zamknięcia otwartych plików innych prac porządkowych Przykłady: zycie-obiektow.php, destruktory.php - 14 -

Przypisania i klonowanie Wszystkie przypisania obiektów w PHP5 są przez referencje (inaczej, niż w PHP4) Żeby sklonować obiekt, należy użyć instrukcję clone: $nowy=clone $stary Przykład: klonowanie.php - 15 -

Dziedziczenie Składnia class Bazowa { } class Potomna extends Bazowa { } Komentarz Dziedziczyć można z tylko jednej klasy Dostępny jest mechanizm polimorfizmu Operator instanceof pozwala ustalić, czy obiekt jest danej klasy Dostęp do nadpisanych składowych jest poprzez operator parent:: - 16 -

Dziedziczenie Przykłady dziedziczenie1.php dziedziczenie2.php polimorfizm.php - 17 -

Klasy abstrakcyjne Klasę taką deklarujemy dodając słowo abstract abstract class K {... } Klasa abstrakcyjna powinna mieć co najmniej jedną metodą abstrakcyjną protected abstract function metoda() Metody nie mogą być private lub final Nie można tworzyć obiektów klas abstrakcyjnych - 18 -

Klasy abstrakcyjne Przykład abstract class CDatabase { abstract public function connect(); abstract public function query(); abstract public function fetch(); abstract public function close(); } class CMySQL extends CDatabase {... } - 19 -

Interfejsy Interfejs zbiór deklaracji metod publicznych Deklaracja interface INazwa { public function f1($arg);... } Nazwa Później klasa może implementować interfejs class K implements INazwa {... } (musi defininiować wszystkie metody interfejsu) Klasa można implementować kilka interfejsów - 20 -

Interfejsy Nazewnictwo plików I{nazwainterfejsu}.php interface.{nazwa_interfejsu}.php Przykład: interfejsy.php - 21 -

Metody magiczne Metody get() i set() Zostaną wykonane w przypadku pobrania/przypisania wartości nieistniejącej zmiennej klasy Można wykorzystać do utworzenia funkcjonalności setterów i getterów Definiowanie metod setxxx i getxxx dla 20 pól może być męczące Przedstawione w przykładzie rozwiązanie niestety ma poważne wady Przykład: magiczne1.php - 22 -

Metody magiczne Metoda call() Przechwytuje wywołania metod, które w klasie nie zostały zdefiniowane Przydatne do implementacji mechanizmu agregacji Metoda clone() Jest wykonywana podczas klonowania obiektu Przykład: magiczne2.php - 23 -

Metody magiczne Metoda tostring Zwraca napis kiedy nazwa klasy jest traktowana jako napis (np. argument echo lub print) Nie działa w następujących przypadkach Przy łączeniu napisów operatorem. Gdy obiekt jest umieszczany w cudzysłowie lub składni heredoc Gdy obiekt jest traktowany w funkcji printf jako napis (%s) Gdy obiekt przekazywany do funkcji jako parametr (w przypadku, gdy funkcja wymaga parametru typu string) Przykład: magiczne3.php - 24 -

Porównywanie obiektów Obiekty możemy porównywać operatorami == porównywane obiekty będą równe, gdy są instancjami tej samej klasy wartości wszystkich pól są takie same === porównywane obiekty będą równe, gdy zmienne wskazują na tą samą instację tej samej klasy Przykład: pogmatwany.php - 25 -