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 atrybuty
• Obiekt Syrenka (konkretna ‘materializacja )
Kolor Poj. Silnika
metody
Nr rejestracyjny.. Ruszaj() Hamuj()...
Czerwony itp
Przykład dziedziczenia • Klasa bazowa • samochód
Klasa pochodna dobry samochód Kolor
atrybuty Kolor Poj. Silnika
metody
Nr rejestracyj ny... Ruszaj() Hamuj()...
Poj. Silnika 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 Sekcje:
unit Unit1;
Interface (część publiczna)
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public
Definicja klasy formularza
Implementation (prywatna) Nieobowiązkowe: initialization (inicjacja instrukcje w momencie startu), finalization (instrukcje kończące)
{ Public declarations } end; 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
var f:procedure(x:integer);
• Typy rekordowe
f:procedure(x:integer) of object
Tablice • Tablica : type TTab=array [0..1000] Wewnętrzne tablice dynamiczne of Double Komponenty: • Tablica dynamiczna TTab1=array of StringGrid double Memo • Tablica wielowymiarowa: type MMacierz1=array[1..10] of array of ListBox String; Chart.Series • MMacierz2=array[1..10,1..50] of Uwaga problem indeksacji String W tablicach dynamicznych Zawsze od 0 • Tablica dynamiczna type MMacierz3=array of array of string Odwrotnie Ai,j (kolumna,wiersz) • Procedura SetLength(rozmiar) ustala rozmiar tablicy dynamicznej
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)