Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.
Konstruktory Konstruktory w językach obiektowych są to specjalne metody wywoływane podczas tworzenia nowego obiektu i służące do jego inicjalizacji (przygotowaniu do późniejszego użycia). Przeobrażają one stertę bitów w pamięci w nowy, "żywy obiekt. W najprostszym przypadku konstruktor ustawia pola obiektu na pewne wartości początkowe.
Wywołanie konstruktora powoduje wykonanie następujących zadań: obliczenie rozmiaru obiektu alokacja obiektu w pamięci wyczyszczenie (zerowanie) obszaru pamięci zarezerwowanej dla obiektu (tylko w niektórych językach) wpisanie do obiektu informacji łączącej go z odpowiadającą mu klasą (połączenie z metodami klasy) wykonanie kodu klasy bazowej (w niektórych językach niewymagane) wykonanie kodu wywołanego konstruktora
W językach C++, C#, PHP 4 konstruktor klasy jest metodą o takiej samej nazwie co klasa. W PHP 5 metoda o nazwie construct.
Konstruktory w różnych językach C++ PHP
Konstruktory w C++ Metoda o tej samej nazwie co klasa Typy konstruktorów: domyślny, zwykły, kopiujący, konstruktor konwertujący
Konstruktor domyślny Konstruktor, który można wywołać bez podawania jakichkolwiek parametrów. Szczególnym przypadkiem konstruktora domyślnego jest konstruktor, w którym wartości wszystkich parametrów mają wartości domyślne, w efekcie czego można go wywołać bez podawania ich, np.: class MojaKlasa { public: MojaKlasa(int parametrdomyslny = 0) { //konstruktor domyślny this->dana = parametrdomyslny; private: int dana; ; int main () { MojaKlasa obiektmojejklasy; //użycie konstruktora domyślnego return 0;
Konstruktor zwykły Konstruktor, który można wywołać, podając co najmniej jeden parametr. Jest to zwykły konstruktor stworzony przez twórcę klasy. Jego zadeklarowanie w C++ nie powoduje niejawnego generowania konstruktora domyślnego. Z reguły parametry takiego zwykłego konstruktora spełniają funkcję inicjalizatorów, które przypisują odpowiednie wartości wewnętrznym zmiennym tworzonego obiektu class Wektor { public: Wektor(double x, double y) { this->x = x; this->y = y; ; private: double x; double y; int main () { Wektor mojwektor(3, 2); return 0;
Konstruktor kopiujący Konstruktor, którego jedynym argumentem niedomyślnym jest referencja do obiektu swojej klasy. Jest on używany niejawnie wtedy, gdy działanie programu wymaga skopiowania obiektu (np.: przy przekazywaniu obiektu do funkcji przez wartość). Gdy konstruktor kopiujący nie został zdefiniowany, jest on generowany niejawnie (nawet gdy są zdefiniowane inne konstruktory) i domyślnie powoduje kopiowanie wszystkich składników po kolei. class MojaKlasa { public: int dana; MojaKlasa(int parametrdomyslny) { // inny konstruktor programu this->dana = parametrdomyslny; ; int main () { MojaKlasa obiektmojejklasy(5); MojaKlasa kopiaobiektu(obiektmojejklasy); // uzyty zostaje wygenerowany niejawnie konstruktor kopiujący std::cout << kopiaobiektu.dana; // wyswietli '5 return 0;
Konstruktor kopiujący W większości przypadków kopiowanie obiektu składnik po składniku jest tym, czego oczekuje użytkownik klasy i nie ma potrzeby definiowania własnej wersji konstruktora kopiującego. Jednak nie zawsze takie działanie jest pożądane class MojaKlasa { public: int* wsk; MojaKlasa(int parametrdomyslny) { this->wsk = new int(parametrdomyslny); ~MojaKlasa() { //destruktor delete this->wsk; ; int main () { MojaKlasa obiektmojejklasy(5); std::cout << *(obiektmojejklasy.wsk) << std::endl; //wyswietli '5 MojaKlasa kopiaobiektu(obiektmojejklasy); // kopiowanie skladnik po składniku *(kopiaobiektu.wsk) = 3; std::cout << *(obiektmojejklasy.wsk) << std::endl; // wyswietli '3 return 0;
Konstruktor konwertujący Konstruktor, którego jedynym argumentem niedomyślnym jest obiekt dowolnej klasy lub typ wbudowany. Powoduje niejawną konwersję z typu argumentu na typ klasy własnej konstruktora class MojaKlasa { public: MojaKlasa(int parametr) { //konstruktor konwertujacy z typu int na typ MojaKlasa // ciało konstruktora ~MojaKlasa() { //destruktor delete this->wsk; ; void funkcja(mojaklasa obiekt) { /* cialo funkcji */ int main () { int zmienna = 5; funkcja(zmienna); //wywolanie konstruktora konwertujacego z int na MojaKlasa return 0;
Konstruktory w PHP Metoda konstruktora musi nazywać się construct. Pobiera dowolną ilość argumentów jednak nie może nic zwracać. Klasa nie musi zawierać konstruktora. Jednak gdy klasa posiada konstruktor, podczas tworzenia obiektów należy podać argumenty, które zostaną przesłane do konstruktora. <? php class Person { private $_name = null; public function construct($name) { $this->_name = $name; public function getname() { return $this->_name; $janusz = new Person('Janusz');
Kolejność wywołań konstruktorów Kolejność wywołań konstruktorów klasy bazowej, czy też obiektów składowych danej klasy, jest określona kolejnością: 1. Konstruktory klas bazowych w kolejności w jakiej znajdują się w sekcji dziedziczenia w deklaracji klasy pochodnej. 2. Konstruktory obiektów składowych klasy w kolejności, w jakiej obiekty te zostały zadeklarowane w ciele klasy. 3. Konstruktor klasy.
Destruktor w obiektowych językach programowania specjalna metoda, wywoływana przez program przed usunięciem obiektu i niemal nigdy nie jest wywoływana wprost w kodzie używającym obiektu. Pod względem funkcjonalnym jest to przeciwieństwo konstruktora. class MojaKlasa { public: ~MojaKlasa(); //destruktor ; MojaKlasa::~MojaKlasa() { //tu wykonujemy wszystkie operacje jakie maja sie wykonac automatycznie tyz przed zwolnieniem zajmowanej pamieci przez klase
Cechy destruktora tak samo jak konstruktor nie posiada zwracanego typu musi być zawsze bezparametrowy możliwość zdefiniowania tylko i wyłącznie jednego destruktora dla danej klasy.
Destruktor oznacza się różnie, w zależności od języka, np.: w C++ nazwa destruktora odpowiada nazwie klasy i poprzedzona jest tyldą (~) w PHP 5 nazwa destruktora to destruct
ITERATORY W programowaniu obiektowym jest to obiekt pozwalający na sekwencyjny dostęp do wszystkich elementów lub części zawartych w innym obiekcie, zwykle kontenerze lub liście. Podstawowym celem iteratora jest pozwolić użytkownikowi przetworzyć każdy element w kolekcji bez konieczności zagłębiania się w jej wewnętrzną strukturę. Np.: przejść do kolejnego elementu, na koniec na początek. Użytkownik nie musi np. zajmować się tym, że odwoła się do nieistniejącego elementu.
ITERATORY w C++ W C++ iteratory są szeroko wykorzystywane w bibliotece STL. Iteratory stosuje się zwykle w parach, gdzie jeden jest używany do właściwej iteracji, zaś drugi oznacza koniec kolekcji. Iteratory tworzone są przez odpowiadający im kontener standardowymi metodami, takimi jak begin() i end(). Iterator zwrócony przez begin() wskazuje na pierwszy element, podczas gdy iterator zwrócony przez end() wskazuje na pozycję za ostatnim elementem kontenera. ContainerType C; //dowolny standardowy typ konterneta np. std::list<sometype> ContainerType::iterator A = C.begin(); ContainerType::iterator Z = C.end(); while (A!= Z) { ContainerType::value_type value = *A; std::cout << value << std::endl; ++A;
ITERATORY w PHP Iterator to obiekt pozwalający na sekwencyjny dostęp do wszystkich elementów lub części zawartych w innym obiekcie (np. iterator zwracający kolejne rekordy korzystając z rezultatu zapytania do bazy danych). Iteratory występują w PHP od wersji 5. $iterator = new DirectoryIterator('directory'); foreach($iterator as $file) { echo $file->getfilename(); echo '<br/>';
ZAPYTANIA Kwerendy utworzone w języku zapytań powodujące wyszukanie, tworzenie, usunięcie lub modyfikację danych w bazie danych. Przykładem języka operującego na zapytaniach w bazach danych jest bardzo popularny SQL (ang. Structured Query Language), wspierany jako standard przez ANSI. Inne, mniej popularne, to np. QBE (ang. Query By Example) czy XQuery.
Przykłady zapytań w języku SQL INSERT INTO TABLE osoby VALUES ('Jan', 'Kowalski') Tworzy nowy rekord w tabeli osoby SELECT imie FROM osoby WHERE nazwisko='kowalski Pobiera z tabeli osoby dane spełniające określone kryteria UPDATE osoby SET imie='adam Modyfikuje dane w tabeli osoby DELETE FROM osoby WHERE nazwisko='kowalski Usuwa z tabeli rekordy spełniające określone kryteria CREATE TABLE OSOBY (imię VARCHAR(50), nazwisko VARCHAR(50)) Tworzy nową tabelę osoby o określonej strukturze
Selektory (CSS) Umożliwiają przypisać wybranemu elementowi konkretny styl. Selektory wykorzystywane podczas tworzenia własnych arkuszy stylów mogą przybierać różne formy. Specyfikacja przewiduje wykorzystanie następujących rodzajów selektorów: selektory proste, selektory uniwersalne, selektory potomka, selektory dziecka, selektory sąsiednie lub rodzeństwa, selektory identyfikatora, selektory klasy, pseudoklasy, pseudoelementy.
Selektory (CSS) Selektory proste P {color:red; font-size:14pt; Selektory uniwersalne P {color:red; font-size:14pt; Selektory "potomka P SPAN {font-style:italic; font-size:20pt; Selektory "dziecka P > SPAN {font-style:italic; textdecoration:underline; color:green; Selektory "rodzeństwa P + SPAN {font-style:italic; textdecoration:underline; color:green; Selektor atrybutu Identyfikatory H1[title] {color:red; P#pochyly {font-style:italic; fontsize:20pt; Klasy p.moja {color:green; font-size:14pt; Pseudoklasy A:link {color:red; A:visited{color:green;