Programowanie obiektowe
Programowanie zorientowane obiektowo Pojęcie klasy i obiektu Elementy klas: Pola klas (dane), metody (procedury i funkcje) KLASA TO WZORZEC. OBIEKT TO KONKRETNY EGZEMPLARZ Hermetyzacja (oddzielenie obiektu od otoczenia) Dziedziczenie Metody wirtualne i statyczne. Obiekty różnych klas mogą posiadać metody o identycznych nazwach i innym działaniu
Przykład klasy Klasa SAMOCHÓD Obiekt Syrenka (konkretna materializacja ) atrybuty Kolor metody Poj. Silnika Nr rejestracyjny.. Ruszaj() Hamuj()... Czerwony itp
Przykład dziedziczenia Klasa bazowa samochód Klasa pochodna dobry samochód Kolor atrybuty Kolor Poj. Silnika metody Poj. Silnika Nr rejestracyj ny... Ruszaj() Hamuj()... Nr rejestracyjny.. Ruszaj() Hamuj(). ABS klimatyzacja.. Nowa wersj
Delphi Object Pascal Język ten wywodzi się z języka Pascal Język w pełni zorientowany obiektowo Rozluźnienie sztywnych zasad bezpieczeństwa typów znanych z Pascala Obsługa wyjątków Dużo komponentów: obsługi komunikatów w Windows, narzędzia internetowe, bazy danych, rozbudowana grafika
Programowanie w Delphi Plik źródłowy Formularz Paleta komponentów: zdarzenia i własności Inspektor obiektów Korzystanie z gotowych podpowiedzi
Plik źródłowy modułu unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; Sekcje: Interface (część publiczna) Implementation (prywatna) type TForm1 = class(tform) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; Definicja klasy formularza Nieobowiązkowe: initialization (inicjacja instrukcje w momencie startu), finalization (instrukcje kończące) var Form1: TForm1; implementation Definicja zmiennych metody klasy TForm
Typy plików używane w Delphi Pas Plik źródłowy Dfm Plik formularza. Opis formularza i komponentów Dsk Plik obszaru roboczego projektu. Plik tworzony wtedy kiedy opcja zachowania obszaru roboczego jest wyłączona Dof Plik opcji projektu Exe Wynikowy Cfg Plik konfiguracyjny. Główne ustawienia kompilatora Dcu Binarne pliki wynikowe kompilatora Dpr Plik źródłowy projektu res Skompilowany plik binarny zasobów
Typy złożone w Object Pascalu Zbiór: type Tliczby=set of 1..10; Tznaki=set of char; Typ tablicowy Typy wskaźnikowe Typy proceduralne, funkcyjne: Metody obiektów Typy rekordowe var f:procedure(x:integer); f:procedure(x:integer) of object
Tablice Tablica : type TTab=array [0..1000] of Double Tablica dynamiczna TTab1=array of double Tablica wielowymiarowa: type MMacierz1=array[1..10] of array of String; MMacierz2=array[1..10,1..50] of String Tablica dynamiczna type MMacierz3=array of array of string Procedura SetLength(rozmiar) ustala rozmiar tablicy dynamicznej Wewnętrzne tablice dynamiczne Komponenty: StringGrid Memo ListBox Chart.Series Uwaga problem indeksacji W tablicach dynamicznych Zawsze od 0 Odwrotnie Ai,j (kolumna,wiersz)
Definiowanie własnego typu w object Pascalu Definicja typu w części interface programu type nazwa typu=definicja danego typu Deklarowanie danego typu w programie Var nazwa zmiennej:nazwa typu; Np: a:tmacierz1 b:tmacierz2 Odwołanie w programie poprzez nazwę zmiennej Zmienne lokalne i globalne (pełny dostęp do komponentów wewnątrz klasy TForm)
Procedury i funkcje Procedure Nazwa(parametry);dyrektywy; Deklaracje lokalne Begin ciąg instrukcji;... End; Parametry przekazywane przez słowa kluczowe var, const lub aut. Jeżeli w deklaracji parametru nie zostało użyte żadne z wymienionych słów kluczowych to parametr jest przekazywany przez wartość (program będzie operował na jego kopi) var : parametr przekazywany przez adres modyfikacje dotyczą bezpośrednio danej zmiennej. Const parametr przekazywany przez adres nie jest możliwe jego zmienianie Wywołanie procedury: Nazwa(parametry) Zakres widoczności zmiennych
Definiowanie funkcji function Nazwa(parametry):typ wyniku;dyrektywy; deklaracje lokalne; Begin ciąg instrukcji result:=wynik; End; Wartość przypisana do zmiennej result jest wynikiem zwracanym przez funkcję musi być typu typwyniku Wywołanie funkcji w programie zmienna:=nazwa Funkcji(parametry) zmienna musi być typu Typ wyniku (nie zawsze)
Definiowanie klasy w Object Pascalu type MClass=class (klasa z której dziedziczymy np.:tobject) pola np:=i:integer; x:real; metody Procedure1(parametry); Function1(parametry):typ wyniku End Każdy składnik klasy może być zadeklarowany w zasięgu jednej z dyrektyw określających jego widoczność: private (widoczne tylko w danej klasie), protected (chronione widoczna tak jak private ale dostępna w klasach pochodnych), public (widoczna zawsze), publshed (to samo jak public ale widoczna w inspektorze obiektów) i automated.
Konstrukcja Klasy Klasa:metody i pola Metody: (procedury i funkcje) Nagłówek umieszczamy wewnątrz klasy a jej treść w części implementation. Nazwa metody jest poprzedzana nazwą klasynp:= TMclass.NazwaProcedury (funkcji) Pola klasy: Dane Definiowanie klasy Deklarowanie zmiennej będącej obiektem danej klasy var NazwaZmiennej:Nazwa klasy (np.: TMclass) Type Myclass=class(klasa bazowa) Private Public End;
Konstrukcja klasy Wywołanie metody danej klasy: NazwaZmiennej.NazwaProcedury(parametry) Wewnątrz klasy do danego pola lub metody odwołujemy się bez nazwy klasy Specjalne metody: constructor(create) i destructor(destroy) Dziedziczenie; Metody wirtualne dynamiczne, statyczne, oraz obsługi komunikatów
Komponent wizualizacja obiektu Zakładka standard: Podstawowe elementy graficznego interfejsu: kontrolki pre definiowane, przycisk, pola opcji wyboru Zakładka Additional: Bardziej skomplikowane kontrolki umożliwiające prezentowanie tekstów i rysunków w postaci tabelarycznej, komponenty służące do prezentacji prostych kształtów oraz grafiki. Komponenty stanowiące rozszerzenie komponentów standardowych Zakładka Win32: Komponenty umożliwiające korzystanie z kontrolek systemowych. Paski narzędzi, pasek statusu, lista obrazków, suwak, komponenty zakładkowe, kontrolka edycyjna RTF, wyświetlanie animacji, lista drzewiasta Zakładka System: Komponenty pozwalające na dodawanie do aplikacji pewnych bardziej złożonych elementów i mechanizmów systemowych Zakładka Dialogs: Komponenty dialogowe do otwierania i zapisywania plików, okno wyboru czcionki, drukowanie
Podsumowanie ważne terminy Komponent wizualizacja Klasa (hermetyzacja, dziedziczenie, bazowa potomna) Obiekt Metody Własności Inspektor obiektów Zdarzenia Nazewnictwo
Podstawowe zasady własności Własności wyglądają jak pola klas oraz posiadają podobne do nich zasady dostępu To specjalna kategoria Często podczas przypisywania własności wartości, jest wykonywana odpowiednia metoda Własności upublicznione posiadają wartości domyślne. Ustalone w inspektorze obiektów Własności mogą być tylko do odczytu lub zapisu albo naraz do odczytu i zapisu Własności działają tylko w czasie wykonywania programu Własności mogą stanowić: Proste typy danych Łańcuchy tekstowe Tablice Zbiory Typy wyliczeniowe
Klasa TForm Definicja w części Interface Klasa TWinControl jest klasą bazową Możemy tworzyć okna: zwykłe dialogowe, modalne i niemodalne Wewnątrz tej klasy mamy dostęp do komponentów znajdujących się na formularzu Dynamiczne tworzenie Formularzy (wywołanie konstruktora)
Metody klasy TForm Create: Konstruktor klasy powoduje utworzenie i zainicjowanie formularza Relase: Likwidacja formularza i zwolnienie z pamięci zajmowanej przez obiekt Show i Hide: Powodują odpowiednio pokazanie i ukrycie formularza (zmiana wartości Visible) ShowModal: Wyświetlanie okna w trybie modalnym. Zwraca wartość typu integer (rezultat modalny formularza) Close: Zamknięcie formularza SetFocus: Umożliwia uczynienie danego formularza aktywnym
Zdarzenia klasy TForm OnCreate, OnDestroy: Inicjacja i wykonanie czynności odwrotnych, zwalnianie z pamięci niepotrzebnych obiektów w momencie niszczenia formularza OnShow, OnHide: Zdarzenia mające miejsce w momencie wyświetlania oraz ukrywania formularza OnActivate, OnDectivate: Zdarzenia zachodzą gdy następuje aktywacja bądź dezaktywacja formularza. OnClose: Zdarzenia określające co ma zachodzić w momencie zamykania formularza
Wspólne metody komponentów Broacast: Wysyła komunikat do wszystkich komponentów potomnych typu okienkowego ClientToScreen: Konwertuje współrzędne okna użytkownika do współrzędnych ekranowych ContainsControl: Zwraca wartość True jeżeli komponent jest potomkiem danego komponentu lub formularza HandleAllocated: Zwraca wartość True, jeżeli dla komponentu został utworzony uchwyt Hide: Ukrywa komponent Invalidate: Wymusza przerysowanie (odświeżenie) komponentu Perform: Przekazuje komunikat bezpośrednio do komponentu
Wspólne metody komponentów Refresh: Wymusza natychmiastowe przerysowanie i czyści Repaint: Wymusza natychmiastowe przerysowanie. Tło komponentu nie jest czyszczone. SetBounds: Umożliwia jednoczesne ustawienie rozmiarów SetFocus: Czyni komponent aktywnym Update: Wymusza natychmiastowe odświeżenie
Najczęściej obsługiwane zdarzenia komponentów OnChange: Zdarzenie jest generowane, gdy w komponencie zajdzie jakakolwiek zmiana. OnClik: Zdarzenie generowane po kliknięciu w obrębie komponentu OnDblClick: Zdarzenie generowane po podwójnym kliknięciu. OnEnter: Pajawia się gdy komponent staje się aktywny. OnExit; Pojawia się gdy komponent przestaje być aktywny. OnKeyDown: Generowane jest po naciśnięciu klawisza w chwili gdy kontrolka przechodzi w stan aktywności (Home, End, Ctr). OnKeyPres: To samo co OnKeyDown ale klawisze: Tab, Backspace, Enter, Esc.
Najczęściej obsługiwane zdarzenia komponentów OnKeyUp: Pojawia się gdy zwolniony zostaje naciśnięty klawisz. OnMouseDown: Generowane gdy kursor znajdzie się nad komponentem i naciśnięty zostanie jeden z przycisków myszy. OnMouseMove: Pojawia się za każdym razem, gdy mysz przemieszcza się nad komponentem. OnMouseUp: Pojawia się gdy przycisk myszy zostaje zwolniony nad komponentem OnPaint: Pojawia się gdy komponent wymaga odświeżenia (ponownego narysowania)