Podstawy programowania obiektowego

Podobne dokumenty
Wprowadzenie do systemu Delphi

Nazwa implementacji: Kółko i krzyżyk w Lazarusie. Autor: Piotr Fiorek Andrzej Stefaniuk

Wprowadzenie do języka Pascal

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.

Instrukcja warunkowa i wyboru

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5

Niniejszy ebook jest własnością prywatną.

Technologie obiektowe

Język programowania. Andrzej Bobyk

PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ

Delphi Laboratorium 3

Podstawy Programowania Obiektowego

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Programowanie obiektowe - 1.

Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych

Materiały do zajęć VII

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Podstawy Programowania 2

Rozdział 4 KLASY, OBIEKTY, METODY

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Instrukcje iteracyjne (pętle)

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Tworzenie własnych komponentów

Programowanie obiektowe

Projektowanie i programowanie aplikacji biznesowych. Wykład 2

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Definiowanie własnych klas

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Język programowania PASCAL

Programowanie w języku Python. Grażyna Koba

Programowanie obiektowe

Projekt Hurtownia, realizacja skojarzeń dostawców i produktów

Paweł Kurzawa, Delfina Kongo

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Podręcznik użytkownika Obieg dokumentów

Kalkulator. Programowanie komputerów. Kalkulator możliwe udoskonalenia. Kalkulator. Kalkulator. Kalkulator możliwe udoskonalenia

Programowanie obiektowe. Obiekt Klasa Składnia klasy: Interfejsy Składnia interfejsu: Metody Składnia instrukcji Sub: Składnia instrukcji function:

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Programowanie obiektowe

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe.

Wykład 3 Składnia języka C# (cz. 2)

Enkapsulacja, dziedziczenie, polimorfizm

Delphi. Lazarus. Kompilatory Delphi. Linki do stron o Delphi

Projekt Hurtownia, realizacja rejestracji dostaw produktów

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Wykład 7: Lazarus GUI

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

Podstawy programowania obiektowego

Programowanie obiektowe

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Projekt Hurtownia, realizacja rejestracji dostaw produktów

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Laboratorium 1 - Programowanie proceduralne i obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

W kodzie modułu Unit1 zdefiniuj dwie metody - składowe komponentu formatki TForm1:

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

TEMAT : KLASY DZIEDZICZENIE

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Wstęp do programowania obiektowego. Wykład 2

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Dziedziczenie jednobazowe, poliformizm

Po uruchomieniu Lazarusa należy wybrać z paska górnego opcję Projekt i następnie Nowy Projekt. Pokaże się okno:

OBIEKTY PHP. G. Panuś

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Wykład PASCAL - Pliki tekstowe

Technologie i usługi internetowe cz. 2

Tabela wewnętrzna - definicja

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Wykład 5: Klasy cz. 3

Literatura. Techniki programowania II s.1-1

Funkcje i instrukcje języka JavaScript

Wykład 5 Okna MDI i SDI, dziedziczenie

Modelowanie obiektowe

Rozdział ten zawiera informacje o sposobie konfiguracji i działania Modułu OPC.

Rys.2.1. Drzewo modelu DOM [1]

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Wykład 8: klasy cz. 4

Programowanie obiektowe

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Wykład 4: Klasy i Metody

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Modelowanie i Programowanie Obiektowe

Dodanie nowej formy do projektu polega na:

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Diagramy klas. dr Jarosław Skaruz

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Modelowanie diagramów klas w języku UML. Łukasz Gorzel @stud.umk.pl 7 marca 2014

Programowanie modułowe

Materiały do laboratorium MS ACCESS BASIC

Transkrypt:

Podstawy programowania obiektowego struktura klasy w Delphi hermetyzacja, definicja pól i metod klasy komponentów biblioteki VCL Techniki programowania II s.2-1

Najważniejsze pojęcia z wykładu 01 Programowanie sterowane zdarzeniami technika programowania polegająca na wyróżnieniu tzw. zdarzeń zachodzących w środowisku programu i przyporządkowaniu tym zdarzeniom określonych sekwencji instrukcji. Programowanie obiektowe programowanie, zazwyczaj w obiektowym języku programowania, które polega na wyodrębnieniu obiektów, ich klas oraz metod. Każdy obiekt traktowany jest jako samodzielny, zamknięty fragment kodu, a funkcjonowanie programu opiera się na komunikacji pomiędzy obiektami. Obiekt abstrakcyjny byt reprezentujący lub opisujący pewną rzecz lub pojęcie obserwowane w modelowanym systemie. Składowe obiektu: atrybuty/własności (nazwane wartości przypisane do obiektu), metody (operacje przypisane do obiektu; operacje, które obiekt potrafi wykonać). Klasa wzorzec określający strukturę pewnej grupy obiektów o takiej samej budowie, czyli posiadających atrybuty o takich samych nazwach, metody o takim samym działaniu, itp.; formalnie: byt semantyczny rozumiany jako miejsce przechowywania takich cech grupy podobnych obiektów, które są dla nich wspólne. Komponent szczególny przypadek obiektu zaprojektowany jako gotowy do użycia element aplikacji, który można dostosować do własnych potrzeb w czasie projektowania programu. Techniki programowania II s.2-2

type <nazwa_klasy> = class(<nazwa_nadklasy>) private pola i metody prywatne public pola i metody publiczne Składnia definicji klasy w Delphi <nazwa_klasy> jest unikalnym identyfikatorem języka Pascal (może składać się z liter alfabetu angielskiego, cyfr i znaku podkreślenia); <nazwa_nadklasy> to element opcjonalny, nazwa klasy bazowej, z której dziedziczy definiowana klasa (dziedziczenie zostanie omówione na wykładzie 4). Techniki programowania II s.2-3

Klasy w Delphi Definicja klasy jest równoważna definicji nowego typu danych; Definicja klasy musi wystąpić przed utworzeniem obiektu danej klasy; Składniki zdefiniowane w sekcji private (składniki prywatne), są dostępne tylko wewnątrz klasy, w której zostały zdefiniowane i nie można odwołać się do nich z poziomu innych klas; Składniki zdefiniowane w sekcji public (składniki publiczne) są dostępne zarówno wewnątrz klasy, w której zostały zdefiniowane jak i z każdego innego miejsca kodu, który ma dostęp do danej klasy; Składniki zdefiniowane bez określenia specyfikatora dostępu są domyślnie traktowane jako publiczne; Każdy składnik zdefiniowany wewnątrz klasy musi mieć nazwę unikalną w obrębie danej klasy, różne klasy mogą zawierać składniki o takich samych nazwach. Techniki programowania II s.2-4

Hermetyzacja w programowaniu obiektowym Hermetyzacja - ukrycie części informacji zawartej w obiekcie (części atrybutów i metod) dla operacji z zewnątrz obiektu. Prywatna część obiektu metody i atrybuty ukryte (hermetyzowane), niewidoczne z zewnątrz, dostępne wyłącznie dla metod przypisanych do obiektu. Publiczna część obiektu metody i atrybuty dostępne z zewnątrz dla każdego składnika aplikacji. Stosowane koncepcje hermetyzacji: Hermetyzacja ortodoksyjna wszystkie operacje, które można wykonać na obiekcie są określone przez metody przypisane do obiektu, bezpośredni dostęp do atrybutów jest niemożliwy, wszystkie operacje wykonywane są jedynie za pośrednictwem publicznych metod; Hermetyzacja ortogonalna każdy atrybut i metoda obiektu mogą być sklasyfikowane jako prywatne lub publiczne. Podstawowe powody stosowania hermetyzacji: Uproszczenie interfejsu obiektu poprzez ukrycie informacji nieistotnych dla użytkownika obiektu; Zapewnienie bezpieczeństwa poprzez ukrycie elementów, których bezpośrednie użycie może spowodować błędy w funkcjonowaniu obiektu. Techniki programowania II s.2-5

Przykład hermetyzacji Konto bankowe Numer: 123-45-67 Transakcje: [ ] Saldo: 27520 Wpłata Wypłata Zestawienie Rys. 6.1. Wewnętrzna struktura obiektu Konto bankowe Numer: 123-45-67 Wpłata Wypłata Zestawienie Rys. 6.2. Struktura widoczna z zewnątrz Pola Saldo i Transakcje są ściśle ze sobą związane. Każda operacja, która zmienia saldo powinna być jednocześnie odnotowana w zestawieniu transakcji. Udostępnienie tych pól do swobodnej modyfikacji przez inne obiekty stwarza potencjalnie niebezpieczeństwo wystąpienia błędów istnieje możliwość modyfikacji salda bez zarejestrowania wykonanej transakcji. Hermetyzacja pozwala ukryć pola Saldo i Transakcje przed innymi elementami programu. Obiekt udostępnia natomiast metody Wpłata, Wypłata i Zestawienie, za pośrednictwem których można w kontrolowany sposób modyfikować i odczytać zawartość tych pól. Inne obiekty mogą wykonać poprawnie operacje zmiany stanu konta bez znajomości jego wewnętrznej struktury. Techniki programowania II s.2-6

Pola klasy Składnia definicji pola: <nazwa_pola>: typ; <nazwa_pola1>, <nazwa_pola2>: typ; <nazwa_pola> jest unikalnym w obrębie klasy identyfikatorem języka Pascal; typ może być dowolnym typem standardowym lub zdefiniowanym przez użytkownika (również inną klasą); każdy obiekt danej klasy posiada własną kopię pól i może im nadać indywidualne wartości, inaczej: pola są związane z konkretnym obiektem danej klasy; w każdym punkcie definicji klasy jest możliwy bezpośredni dostęp do wszystkich pól zdefiniowanych w tej klasie (publicznych i prywatnych); spoza definicji klasy możliwy jest dostęp tylko do pól publicznych; przyjmując pewne uproszczenie własności komponentów mogą być traktowane jako publiczne pola klas tych komponentów. Techniki programowania II s.2-7

Metody proceduralne i funkcyjne Metoda proceduralna wyodrębniona część kodu klasy, stanowiąca pewną całość o jednoznacznej nazwie i ustalonym sposobie wymiany informacji z pozostałymi częściami programu. Metoda proceduralna wykonuje pewną sekwencję operacji, której wynikiem może być wyznaczenie jednej lub wielu wartości (może nie wyznaczać żadnej). Metoda funkcyjna wyodrębniona część kodu klasy, stanowiąca pewną całość o jednoznacznej nazwie i ustalonym sposobie wymiany informacji z pozostałymi częściami programu. Metoda funkcyjna zawsze wyznacza dokładnie jedną wartość, która jest zwracana jako wynik jej działania. Zastosowanie metod metody publiczne realizują zadania wynikające z funkcjonalności obiektu, metody prywatne umożliwiają podział dużych algorytmów na mniejsze części, zwiększają czytelność kodu przez oddzielenie i nazwanie operacji koniecznych do zrealizowania dużego algorytmu, pozwalają na zdefiniowanie pomocniczych podprogramów, które mogą być używane wielokrotnie w różnych metodach danej klasy; w Delphi procedury zdarzeń komponentów są definiowane jako metody formularza, do którego należy dany komponent. Techniki programowania II s.2-8

Deklaracja metody (prototyp) Stworzenie nowej metody wymaga deklaracji w kodzie klasy (odpowiednio w części private lub public) oraz właściwej definicji umieszczonej poza klasą. Składnia deklaracji metody proceduralnej: procedure <nazwa_metody>(argumenty_formalne); Składnia deklaracji metody funkcyjnej: function <nazwa_metody>(argumenty_formalne): typ_wyniku; <nazwa_metody> jest unikalnym w obrębie klasy identyfikatorem języka Pascal; typ_wyniku to typ wartości zwracanej przez metodę funkcyjną, może być typem standardowym lub zdefiniowanym przez użytkownika; argumenty_formalne są elementem opcjonalnym, parametryzują metodę i określają sposób jej komunikacji z innymi elementami programu (dane przesyłane do metody i/lub rezultaty wyprowadzane na zewnątrz). Techniki programowania II s.2-9

Definicja metody proceduralnej procedure <nazwa_klasy>.<nazwa_metody>(arg_formalne); definicje i deklaracje lokalne kod metody definicja metody znajduje się poza klasą; <nazwa_klasy> jest nazwą klasy, do której należy metoda; nagłówek metody (nazwa, argumenty formalne) musi odpowiadać jej deklaracji; definicje i deklaracje lokalne to deklaracje zmiennych i definicje typów które są dostępne tylko wewnątrz danej metody; kod metody to ciąg instrukcji języka Pascal, który implementuje algorytm realizowany przez daną metodę. Techniki programowania II s.2-10

Definicja metody funkcyjnej function <nazwa_klasy>.<nazwa_metody>(arg_form): typ_wyniku; definicje i deklaracje lokalne kod metody Result := wyrażenie; definicja metody znajduje się poza klasą; <nazwa_klasy> jest nazwą klasy, do której należy metoda; nagłówek metody (nazwa, argumenty formalne) musi odpowiadać jej deklaracji; definicje i deklaracje lokalne to deklaracje zmiennych i definicje typów które są dostępne tylko wewnątrz danej metody; kod metody to ciąg instrukcji języka Pascal, który implementuje algorytm realizowany przez daną metodę; Wartość przypisana do Result określa wynik metody funkcyjnej (wartość zwracaną przez metodę). Techniki programowania II s.2-11

definicja klasy formularza Przykład klasa formularza (Przykład 1., wykład 01) type TForm1 = class(tform) Label1 : TLabel; Edit1 : TEdit; Button1: TButton;... procedure Button1Click(Sender: TObject); private public var Form1: TForm1; pola klasy (komponenty formularza) prototyp metody (proc. obsł. zdarzenia) prywatna i publiczna część klasy deklaracja zmiennej reprezentującej obiekt formularza procedure TForm1.Button1Click(Sender: TObject); var a,b,x: real; a := StrToFloat(Edit1.Text);... definicja metody Techniki programowania II s.2-12

Odwołania do pól i metod Wszystkie składniki (prywatne i publiczne) są dostępne bezpośrednio z poziomu klasy w której zostały zdefiniowane. W takim przypadku odwołanie do pola lub metody odbywa się przez określenie ich nazwy. Poza klasą można odwołać się tylko do składników publicznych poprzez obiekt klasy, do której metoda należy. Odwołania do składników wewnątrz klasy Pole: nazwa_pola Metoda proceduralna: nazwa_metody(argumenty_aktualne); Metoda funkcyjna: Odwołania do metod poza klasą Pole: zmienna := nazwa_metody(argumenty_aktualne); nazwa_obiektu.nazwa_pola Metoda proceduralna: nazwa_obiektu.nazwa(argumenty_aktualne); Metoda funkcyjna: zmienna := nazwa_obiektu.nazwa(arg_aktualne); argumenty_aktualne argumenty o typach zgodnych z typem argumentów formalnych, których wartości zostaną przekazane do funkcji; zmienna nazwa zmiennej, w której zostanie umieszczona wartość zwracana przez metodę funkcyjną (typ zmiennej musi być zgodny z typem wyniku metody). Techniki programowania II s.2-13

Przykłady metod wybranych komponentów Większość komponentów interfejsu użytkownika: Focused sprawdza czy komponent jest w ognisku (jest aktywny); SetFocus ustawia komponent w ognisku (jako aktywny); Hide Show Refresh Komponent TEdit: Clear CopyToClipboard CutToClipboard ukrywa komponent; pokazuje ukryty komponent; wymusza odświeżenie komponentu. usuwa zawartość pola tekstowego; kopiuje zawartość pola tekstowego do schowka; przenosi zawartość pola tekstowego do schowka; PasteFromClipboard wkleja zawartość schowka do pola tekstowego; SelectAll zaznacza zawartość pola tekstowego. Komponent TButton: Click symuluje kliknięcie na przycisku (generuje zdarzenie OnClick). Techniki programowania II s.2-14

Przykład metody klasy TEdit i TButton procedure TForm1.Button1Click(Sender: TObject); Edit1.SetFocus; Edit1.SelectAll; procedure TForm1.Button2Click(Sender: TObject); Edit1.SetFocus; Edit1.CopyToClipboard; procedure TForm1.Button3Click(Sender: TObject); Edit1.PasteFromClipboard; procedure TForm1.Button4Click(Sender: TObject); Edit1.Hide; Button4.Hide; Button5.Show; procedure TForm1.Button5Click(Sender: TObject); Edit1.Show; Button4.Show; Button5.Hide; Pełny kod programu dostępny na stronie przedmiotu jako "Przykład02_1" Techniki programowania II s.2-15

Zastosowanie Komponent ListBox Przewijana lista elementów (dowolna długość) z możliwością modyfikacji zawartości w czasie działania aplikacji. Wybrane własności Wszystkie omówione na s.1-16 z wyjątkiem Caption; ExtendedSelection rozszerzona selekcja, decyduje o sposobie selekcji elementów w trybie MultiSelect, wartość logiczna; ItemIndex indeks zaznaczonego elementu, liczba całkowita; Items zawartość listy (elementy wyświetlane w liście), klasa TStrings; MultiSelect włącza tryb zaznaczania kilku elementów, wartość logiczna; Sorted włącza automatyczne sortowanie zawartości listy, wartość logiczna. Wybrane metody procedure Clear usuwa wszystkie elementy listy (czyści zawartość ListBox); procedure DeleteSelected usuwa zaznaczony element. Techniki programowania II s.2-16

Metody klasy TStrings TStrings klasa obiektów reprezentująca kolekcję łańcuchów znakowych, np. własność Items komponentów ListBox, ComboBox. Wybrane metody klasy TStrings function Add(S: String): Integer; Dodaje nowy element na końcu listy, zwraca numer pozycji pod którą został umieszczony (elementy numerowane od zera) procedure Delete(Index: Integer); Usuwa z listy element o pozycji określonej przez argument Index procedure Insert(Index: Integer; S: String); Wstawia nowy element do listy na pozycji określonej przez argument Index (elementy numerowane od zera) function IndexOf(S: String): Integer; Zwraca numer pozycji elementu "S" (elementy numerowane od zera) lub -1 jeżeli "S" nie został znaleziony procedure LoadFromFile(N:String), procedure SaveToFile(N:String) Odcytuje/zapisuje zawartość listy do pliku tekstowego o nazwie "N" Techniki programowania II s.2-17

procedure TForm1.Button1Click(Sender: TObject); var s: string; s := Edit1.Text; ListBox1.Items.Add(s); Przykład metody klasy TListBox i TStrings procedure TForm1.Button2Click(Sender: TObject); var idx: Integer; s: string; idx := ListBox1.ItemIndex; s := Edit1.Text; ListBox1.Items.Insert(idx, s); procedure TForm1.Button3Click(Sender: TObject); ListBox1.DeleteSelected; procedure TForm1.Button4Click(Sender: TObject); ListBox1.Clear; Techniki programowania II s.2-18

procedure TForm1.Button5Click(Sender: TObject); ListBox1.Items.SaveToFile('przyklad2_2.txt'); Przykład metody klasy TListBox i TStrings procedure TForm1.Button6Click(Sender: TObject); ListBox1.Items.LoadFromFile('przyklad2_2.txt'); procedure TForm1.Button7Click(Sender: TObject); var idx: Integer; idx := ListBox1.Items.IndexOf(Edit1.Text); ListBox1.ItemIndex := idx; Pełny kod programu dostępny na stronie przedmiotu jako "Przykład02_2" Techniki programowania II s.2-19

Argumenty metod przekazywanie przez wartość Składnia argument1: typ; argument2,argument3: typ2... argument nazwa argumentu, identyfikator unikalny w obrębie metody. Przykład procedure Metoda1(x: integer); procedure Metoda2(x,y: real); procedure Metoda3(a,b: string; x,y,z: real); function Metoda4(x,y: real; z: integer): real; Cechy argumentów przekazywanych przez wartość operacje wykonywane na argumentach formalnych wewnątrz metody nie powodują zmian wartości odpowiadających im argumentów aktualnych; argumenty formalne traktowane są jak zmienne lokalne metody, które otrzymują wartość początkową na podstawie wartości argumentów aktualnych określonych w chwili wywołania; argumenty aktualne mogą być dowolnym wyrażeniem o typie zgodnym (w sensie przypisania) z typem odpowiadającego im argumentu formalnego. Techniki programowania II s.2-20

Składnia Argumenty metod przekazywanie przez referencję (zmienną) var argument1: typ; var argument2, argument3: typ2... argument nazwa argumentu, identyfikator unikalny w obrębie procedury. Przykład procedure Metoda1(var x: integer); procedure Metoda2(var x,y: real); procedure Metoda3(var a: string; var x: real); function Metoda4(var x,y: real): integer; Cechy argumentów przekazywanych przez zmienną operacje wykonywane na argumentach formalnych wewnątrz metody powodują natychmiastowe zmiany odpowiadających im argumentów aktualnych; argumenty aktualne muszą być zmienną o typie identycznym z typem odpowiadającego im argumentu formalnego; argumenty typu plikowego (file) muszą być przekazywane przez zmienną. Techniki programowania II s.2-21

Przykład argumenty metod (1) TForm1 = class(tform) GroupBox1: TGroupBox; Edit1: TEdit; Label1: TLabel; Button1: TButton;... procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private function Test1(a,b: Integer): Integer; procedure Test2(a,b: Integer); procedure Test3(var a,b: Integer); public Pełny kod programu dostępny na stronie przedmiotu jako "Przykład02_3" Techniki programowania II s.2-22

Przykład argumenty metod (1) Prywatna metoda funkcyjna Test1 function TForm1.Test1(a,b: Integer): Integer; Result := a+b; Metoda obsługi zdarzenia OnClick przycisku Button1 procedure TForm1.Button1Click(Sender: TObject); var x, y, w: Integer; x := StrToInt(Edit1.Text); y := StrToInt(Edit2.Text); w := Test1(x,y); Edit3.Text := IntToStr(w); Przykład 1. x 4, y 7 2. Test1(x,y) 3. a 4, b 7 4. Result a+b(11) 5. w 11 Wartości argumentów aktualnych (zmienne lokalne x i y) są przekazane do metody Test1 jako argumenty formalne a i b (a przyjmuje wartość zmiennej x, b zmiennej y). Metoda oblicza sumą argumentów a+b i zwraca wynik przypisywany do zmiennej lokalnej w. Techniki programowania II s.2-23

Przykład argumenty metod (2) Prywatna metoda proceduralna Test2 (argumenty przekazane przez wartość) procedure TForm1.Test2(a,b: Integer); a := a+1; b := b+2; Metoda obsługi zdarzenia OnClick przycisku Button2 procedure TForm1.Button2Click(Sender: TObject); var x, y: Integer; x := StrToInt(Edit4.Text); y := StrToInt(Edit5.Text); Test2(x,y); Edit4.Text := IntToStr(x); Edit5.Text := IntToStr(y); Przykład 1. x 1, y 2 2. Test2(x,y) 3. a 1, b 2 4. a a+1(2) 5. b b+2(4) 6. x = 1, y = 2 Argumenty aktualne (zm. lokalne x i y) są przekazane do metody Test2 jako argumenty formalne a i b przez wartość. Zm. x jest kopiowana do a, zm. y do b. Metoda modyfikuje lokalne kopie (a i b), nie zmieniając wartości argumentów aktualnych (x i y mają wartości takie jak przed wywołaniem metody). Techniki programowania II s.2-24

Przykład argumenty metod (3) Prywatna metoda proceduralna Test3 (argumenty przekazane przez referencję) procedure TForm1.Test3(var a,b: Integer); a := a+1; b := b+2; Metoda obsługi zdarzenia OnClick przycisku Button3 procedure TForm1.Button3Click(Sender: TObject); var x, y: Integer; x := StrToInt(Edit6.Text); y := StrToInt(Edit7.Text); Test3(x,y); Edit6.Text := IntToStr(x); Edit7.Text := IntToStr(y); Przykład 1. x 1, y 2 2. Test3(var x,y) 3. a x, b y 4. a a+1(2) x 5. b b+2(4) y 6. x = 2, y = 4 Argumenty aktualne (zm. lokalne x i y) są przekazane do metody Test3 jako argumenty formalne a i b przez referencję. Argument a jest referencją do zm. x (nie jest kopią x), b referencją do zm. y. Zmiana argumentu a (b) powoduje natychmiastową zmianę x (y). Po zakończeniu metody x i y mają nowe wartości. Techniki programowania II s.2-25

Przykład kalkulator, wersja I TForm1 = class(tform) Label1: TLabel; Edit1: TEdit; Button1: TButton;... procedure Button1Click(Sender: TObject);... private public procedure TForm1.Button1Click(Sender: TObject); var a, b, w: real; try a := StrToFloat(Edit1.Text); // <--!!! b := StrToFloat(Edit2.Text); // <--!!! w := a+b; Edit3.Text := 'Wynik: '+FormatFloat('0.00',w); // <--!!! except ShowMessage('a i b muszą być liczbami'); Pozostałe procedury zdarzeń OnClick analogicznie Pełny kod programu dostępny na stronie przedmiotu jako "Przykład02_4" Techniki programowania II s.2-26

TForm1 = class(tform) Label1: TLabel; Edit1: TEdit; Button1: TButton;... procedure Button1Click(Sender: TObject);... private function Odczyt(e: TEdit): Real; procedure Wynik(w: Real); procedure Dane(var a, b: Real); public Przykład kalkulator, wersja II Prywatne metody realizujące wielokrotnie powtarzane operacje: Odczyt odczytuje wartość liczbową (liczba rzeczywista) z pola edycyjnego przekazanego jako argument e i zwraca jako rezultat funkcji, Wynik wyświetla wynik operacji przekazany jako argument w, Dane odczytuje dwie wartości liczbowe z pól Edit1 i Edit2 zwracane jako argumenty a i b przekazane przez referencję (alternatywa dla Odczyt). Pełny kod programu dostępny na stronie przedmiotu jako "Przykład02_5" Techniki programowania II s.2-27

function TForm1.Odczyt(e: TEdit): Real; Result := StrToFloat(e.Text); procedure TForm1.Wynik(w: Real); Edit3.Text := 'Wynik: '+FormatFloat('0.00',w); Przykład metody Odczyt i Wynik Przykład użycia metod prywatnych w procedurze zdarzenia Button1Click procedure TForm1.Button1Click(Sender: TObject); var a, b, w: real; try a := Odczyt(Edit1); // <--!!! b := Odczyt(Edit2); // <--!!! w := a+b; Wynik(w); // <--!!! except ShowMessage('a i b muszą być liczbami'); Techniki programowania II s.2-28

Przykład metoda Dane procedure TForm1.Dane(var a, b: Real); a := StrToFloat(Edit1.Text); b := StrToFloat(Edit2.Text); Przykład użycia metody prywatnej w procedurze zdarzenia Button3Click procedure TForm1.Button3Click(Sender: TObject); var a, b, w: real; try Dane(a, b); // <--!!! w := a*b; Wynik(w); except ShowMessage('a i b muszą być liczbami'); Uwaga: metody Odczyt i Dane demonstrują alternatywne rozwiązania odczytu danych. W przykładzie zostały wykorzystane obydwa podejścia w celu zaprezentowania różnego sposobu przekazywania parametrów. W praktyce należy wybrać i konsekwentnie używać tylko jednej z przedstawionych możliwości. Techniki programowania II s.2-29