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)