Wprowadzenie do Object
Pascal
W środowisku Delphi
Programowanie
(powtórka)
•
Asembler
–
Zalety i wady
•
Języki wysokiego poziomu
–
Delphi, C++, Basic, Java
•
Przyczyny popularności C++ (Microsoft Visual
Studio, Borland C++ Builder)
•
Przyczyny popularności języka Basic (Visual Basic)
•
Przyczyny popularności języka Java (JDK, Visual
Café)
•
Czemu Delphi?
•
Może PHP lub Pearl?
Czym jest Delphi?
•
Przyczyny popularności Pascala (od lat 80tych)
•
Object Pascal
•
Delphi – środowisko tworzenia i uruchamiania
programów w Object Pascalu
•
Narzędzie klasy RAD
•
Środowisko wizualne
•
Wersje
–
Personal Edition (
) - 85 komponentów
–
Professional – 255 komponentów
–
Enterprise (obsługa baz danych) – ponad 300
komponentów
Komponenty
•
Komponent – obiekt (graficzny) do budowy
interfejsu, z biblioteki VCL
•
Interfejs – najważniejszy czy nie?
•
Projektant formularzy
•
Inspektor obiektów
–
Właściwości (wygląd i zachowanie komponentów)
–
Zdarzenia (akcje podejmowane po zajściu
określonych wydarzeń)
•
Edytor kodu
•
PROJEKT == APLIKACJA
Pliki Delphi
•
*.pas – pliki zawierające kod źródłowy modułów
(w szczególności formularzy)
•
*.dfm – informacje o formularzach (np. o ich
komponentach i usytuowaniu)
•
*.dcu – skompilowane pliki modułów
•
*.dpr – plik główny aplikacji
•
*.cfg – opcje Delphi (ustawienia kompilatora)
•
*.dof – opcje projektu
•
*.res – pliki z zasobami (ikona dla pliku
wykonywalnego, obrazy graficzne zawarte w
komponentach, multimedia)
Struktura aplikacji
•
Program główny
•
W praktyce nieograniczona liczba modułów
zapisanych w niezależnych plikach, w
szczególności odpowiadających formularzom
•
Rola programu głównego
•
Podział kodu na moduły
–
Reguły podziału
–
Zalety
•
Moduł Windows.pas – WinAPI
•
Istota i zalety korzystania z WinAPI
Komunikacja w trybie
DOS
•
Dyrektywy kompilatora
{$dyrektywa parametr}
•
Dyrektywa {$APPTYPE
CONSOLE}
•
Konwencja Turbo Pascala
•
Komunikacja: readln, writeln
•
Przykład: Project1
Plik projektu
•
Plik projektu (głównego modułu aplikacji) ma rozszerzenie .dpr
•
Jest punktem startowym i końcowym aplikacji
•
Składnia
program HelloWorld;
uses
Forms,
umain in ‘umain.pas’; {np. formularz}
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Budowa pliku kodu
źródłowego
unit Unit1
interface
uses
windows, messages,
SysUtils, Classes, Graphics,
Controls, Forms, Dialogs;
type
TForm1 = class (TForm)
private
//private declarations
public
//public declarations
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
initialization
//to musi wprowadzić
programista
finalization //j.w.
end.
Przykład
•
Skrajne rozdrobnienie na moduły
•
Plik główny (projektu)
•
Trzy moduły
•
Sygnatury (nagłówki) udostępnianych
komponentów programu (aplikacji)
•
Implementacja tych komponentów
•
Przykład: Project2
Struktura modułu
•
Instrukcja unit
•
Sekcja interface
–
Opisuje co w danym module „widzi” reszta aplikacji
–
Nie zwiera kodu wykonawczego lecz typy, stałe,
zmienne, nagłówki procedur i funkcji, interfejsy klas (!!)
•
Sekcja implementation
–
Fragment kodu wykonawczego całej aplikacji
–
Zmienne, typy, stałe, procedury i funkcje, klasy (!!) o
zasięgu lokalnym
–
Implementacje procedur, funkcji i metod klas (!!)
•
Uwaga: hermetyczność klas w ramach tego
samego modułu jest naruszana
Klauzula uses
•
Informuje kompilator, że powinien dołączyć kod
znajdujący się w modułach wymienionych w tej
klauzuli
•
Może występować zarówno w części interfejsu jak
i implementacji
•
Występuje natychmiast za słowami: interface i
implementation
•
Jeśli dwa moduły odwołują się do siebie, to w celu
uniknięcia błędu cyklicznych odwołań, M1
powinien odwoływać się do M2 w sekcji interfejsu,
natomiast M2 do M1 – w sekcji implementacji
Inicjalizacja i finalizacja
•
Sekcja initialization
–
Kod tej sekcji modułu jest uruchamiany przed pozostałą częścią
modułu
–
Innymi słowy, jest on wykonywany w momencie ładowania modułu
do pamięci operacyjnej
–
Typowo służy do inicjalizacji zmiennych (lokalnych, globalnych), w
szczególności do tworzenia zmiennych dynamicznych
(wskaźnikowych)
•
Sekcja finalization
–
Zwykle ma sens tylko wtedy, gdy w module występuje również sekcja
inicjalizacji
–
Stosowana do wykonywania kodu „porządkującego”, np.
zwalniającego pamięć przydzieloną do obiektów w sekcji inicjalizacji
–
Sekcje finalizacji wielu modułów są wykonywane w przeciwnej
kolejności niż wcześniej wykonane sekcje inicjalizacji
•
Przykład: Project3
Testowanie
oprogramowania
•
Typy błędów
–
Leksykalne (nazewnicze)
–
Składniowe (syntaktyczne)
–
Semantyczne (błędny algorytm)
–
Wykonawcze (run time)
•
Błędy wykrywane przez kompilator (linker)
–
Leksykalne
–
Składniowe
•
Błędy wymagające korekty koncepcyjnej (pomocny w
ich identyfikacji debugger)
–
Semantyczne
•
Błędy wykrywane dzięki debuggerowi
–
wykonawcze
Śledzenie ścieżek
wykonywania aplikacji
•
Praca „krokowa” („krok” o różnej długości)
–
Przykład: Project3
–
Instrukcja po instrukcji na tym samym poziomie architektury
aplikacji (tzn. bez zagnieżdżania w wywoływane procedury,
funkcje i metody), ang. step over
–
Instrukcja po instrukcji, ang. trace into
–
Do kolejnego wiersza kodu źródłowego, ang. trace into next
source line (bez względu na przepływ sterowania – przejście do
kolejnego wiersza)
–
Przejście do pozycji kursora w kodzie (ang. run to cursor)
–
Zatrzymanie po powrocie z procedury lub funkcji, ang. run until
return
–
Wskazanie miejsca zatrzymania, ang. show execution point
(istotne, gdy oglądamy inny fragment programu)
–
Dodawanie pułapek, ang. add breakpoint (wykonanie w czasie
rzeczywistym, aż do napotkania pułapki
Podglądanie i modyfikacja
zmiennych
•
„Czujki”, ang. add watch, służą do bieżącej kontroli
stanu wybranych zmiennych w trakcie krokowego
(por. poprzedni slajd) wykonywania programu
•
Sprawdzanie wartości określonych wyrażeń, ang.
evaluate, zbudowanych na bazie dostępnych w
danym kontekście elementów (zmiennych)
programu
•
Modyfikacja wybranych zmiennych (pól obiektów)
programu, ang. modify, w celu sprawdzenia zmiany
jego zachowania (jednorazowa, bez modyfikacji
kodu)
Podsumowanie
•
Zintegrowane środowisko typu RAD
•
Programowanie wizualne (VCL)
•
Styl programowania
–
Strukturalny
–
Obiektowy
–
Modułowy
•
Perspektywy rozwoju Object Pascal