Wykład 11 Informatyka MPDI Podprogramy Zmienne typu zbiorowego Rekurencja Typ obiektowy Zmienne dynamiczne.

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Język C/C++ Funkcje.
Programowanie obiektowe
Rekurencja 1 Podprogram lub strukturę danych nazywamy rekurencyjną, (recursive subprogram, recursive data structure) jeżeli częściowo składa się z samej.
Programowanie obiektowe
Programowanie obiektowe
Język ANSI C Funkcje Wykład: Programowanie komputerów
PROGRAMOWANIE STRUKTURALNE
PROGRAMOWANIE STRUKTURALNE
Elementarne struktury danych Piotr Prokopowicz
ZŁOŻONOŚĆ OBLICZENIOWA
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 6: Tablice, rekordy, zbiory.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 5: Typy porządkowe, wyliczeniowe i okrojone. Definiowanie.
Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje
Kurs Pascala – spis treści
Struktury.
C++ wykład 2 ( ) Klasy i obiekty.
Ogólne jednostki programowe 1
Dynamiczne struktury danych 1
Tablice jednowymiarowe 1
Wykład 2 struktura programu elementy języka typy zmienne
Wstęp do programowania obiektowego
Wstęp do interpretacji algorytmów
Typy wskaźnikowe, dynamiczne struktury danych
Podprogramy.
Typy złożone, case, stałe. Typ zbiorowy type typ_zb = set of typ_podstawowy; Typem podstawowym może być tylko typ porządkowy. Typem podstawowym może być
Podstawy programowania II
Podstawy programowania II
Programowanie strukturalne i obiektowe
Operacje na strukturach listowych
Andrzej Jędryczkowski Nie da się napisać większego programu bez podziału go na części zwane podprogramami. Podprogram to wyróżniona część programu.
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
Procedury i funkcje.
Pliki Pojęcie i rodzaje plików Definicja typu plikowego Operacje wykonywane na plikach elementowych.
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
Inicjalizacja i sprzątanie
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Zbiory i rekordy mgr inż. Agata Pacek. Deklaracja typu zbiorowego (określa ilość elementów w zbiorze) type biegi=set of 0..6; Definiowanie zmiennej typu.
Koncepcja procesu Zadanie i proces. Definicja procesu Process – to program w trakcie wykonywania; wykonanie procesu musi przebiegać w sposób sekwencyjny.
Podstawy informatyki 2013/2014
Informatyka MPZI Wykład 4 Podprogramy Pliki Typ zbiorowy Rekurencja.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Programowanie obiektowe – język C++
Programowanie obiektowe 2013/2014
Informatyka PDF Wykład 12.
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
Wykład 10 typ zbiorowy rekurencja.
Programowanie w języku C++
Projektowanie stron WWW
Algorytmika.
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Podstawowe struktury danych. Typy danych.
Projektowanie obiektowe. Przykład: Punktem wyjścia w obiektowym tworzeniu systemu informacyjnego jest zawsze pewien model biznesowy. Przykład: Diagram.
Programowanie Zaawansowane
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Wstęp do interpretacji algorytmów
Wykład 2 Programowanie obiektowe. Programowanie obiektowe wymaga dobrego zrozumienia działania funkcji definiowanych przez użytkownika, w ten sposób będziemy.
Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia.
P ASCAL Definicje, deklaracje, podstawowe instrukcje 1.
Wykład 1 Informatyka II MPZI2 sem.letni. Tablice Tablice deklarujemy array [ lista typów indeksów ] of typ bazowy (składowych) np. var t1,t2:array [1..5,
Matlab - obliczenia statystyczne Rekurencja Inne typy danych Wykład 5 INFORMATYKA 2 MPZI2 sem. 4 1.
Programowanie Obiektowe – Wykład 6
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Programowanie Obiektowe – Wykład 2
Zapis prezentacji:

Wykład 11 Informatyka MPDI Podprogramy Zmienne typu zbiorowego Rekurencja Typ obiektowy Zmienne dynamiczne

P odprogramy Cel: dzielenie programu na części (logicznie spójne) Cechy:  mają unikalne nazwy (identyfikatory)  są niezależne od pozostałych części  określony jest sposób wymiany informacji z innymi częściami (przekazywanie danych) Korzyści:  krótszy zapis źródłowy  efektywniejsze wykorzystanie pamięci operacyjnej  czytelność  łatwiejsze uruchamianie i testowanie  tworzenie bibliotek podprogramów i korzystanie z nich Pojęcie i istota stosowania

różnice - sposób definiowania - funkcja przyjmuje wartość, a procedura nie - sposób inicjacji wykonania Podstawowy cel: upraszczanie kodu dla wielokrotnych wykonań pewnych grup instrukcji ze zmienianymi danymi wejściowymi Podział procedury funkcje

Nagłówki Procedura procedure nazwa_proc (deklaracje_parametrów_formalnych ); Funkcja function nazwa_fun ( deklaracje_param._formalnych ): typ_wartości ; lista deklaracji w nawiasie

elementy listy oddzielane ; różnią się mechanizmem przekazywania danych lista_nazw_parametrów_formalnych: nazwa_typu var lista_nazw_parametrów_ formalnych : nazwa_typu Elementy listy są dwóch typów

Czyli musimy zdefiniować: sposób otrzymywania przez podprogram danych ewentualny zwrot wyników operacje wykonawcze podprogramu podprogram dane wyniki

function nazwa (parametry formalne): typ funkcji ; definicje, deklaracje lokalne begin.... nazwa := wyrażenie; //albo result:=wyrażenie; end ; procedure nazwa (parametry formalne) ; definicje, deklaracje begin.... instrukcje.... end ; Definicje funkcji i procedury ( umieszczamy w części definicyjnej programu ) danetyp wyniku dane i ewentualne wyniki w JavaScript było return wynik

Wywołanie (wykonanie) podprogramu procedura – osobna instrukcja wykonania: nazwa_procedury( lista_parametrów_aktualnych ); Uwagi: parametry aktualne muszą być zgodne z parametrami formalnymi: - co do liczby - co do typu - co do kolejności funkcja – najczęściej w wyrażeniu (jako składniku instrukcji) – w zależności od typu zwracanej wartości, ale może być też osobną instrukcją, gdy nie zależy nam na zwracanej wartości parametry aktualne oddzielane są przecinkami,

var a, b, c:real; begin a:=2; c:= srednia (6.7, 2*a); // użycie funkcji w przypisaniu writeln(c:5:2) ; readln; end. function srednia (x1, x2 : real): real ; begin result := (x1 + x2)/2 ; //albo srednia:= (x1 + x2)/2 ; //przypisanie do nazwy funkcji end ; {koniec definicji funkcji} parametry formalne (ogólne) typ wyniku program p1 ; Przykład funkcji obliczającej średnią arytmetyczną definicja funkcji parametry aktualne (znane wartości) przekazanie do zwrot wyniku

Przekazywanie danych z/do podprogramu parametr formalny bez var jest zmienną lokalną - wartość początkowa w momencie wywołania argument aktualny - wyrażenie typu zgodnego przekazywanie danych tylko na wejściu do podprogramu przez zmienną (adres) - określonego typu (referencyjnie) parametr formalny z var !!!! faktycznie nie dane lecz adres argumentu aktualnego argument aktualny - zmienna tego samego typu przekazywanie danych na wyjściu (czyli w większości przypadków zwrot wyniku lub wyników) - ale może być także na wejściu przez wartość

program x; procedure alfa(x1,x2:real; var wynik:real); begin wynik:=ln(x1-x2)/5; end; var w:real; //dodatkowa zmienna begin alfa(5,2,w); //wykonanie procedury (osobna instrukcja) writeln(w) ; alfa(4,2,w); writeln(w) ; readln; end; definicja procedury Przykład przekazanie do zwrot wyniku

var a, b, c:real; begin a:=2; b:=3; srednia (6.7, 2*a, c); {trzeci parametr aktualny musi być zmienną} writeln(c)) ; {c jest równe (6.7+2*2)/2=5.35} srednia (a, b, c) ; //wykonanie procedury writeln(c) ; {c jest równe (2+3)/2=2.5} srednia (a, c, c) ;// wykonanie procedury writeln(c) ; {c jest równe (2+2.5)/2=2.25} srednia (c, b, a) ; //wykonanie procedury writeln(a) ; {a jest równe (2.25+3)/2= end; Przykład procedury obliczającej średnią arytmetyczną parametry formalne parametry aktualne var !! procedure srednia (liczba1, liczba2 : real ; var wynik : real) ; begin wynik := (liczba1 + liczba2)/2 ; end ; {koniec definicji procedury}

program Project2; {$APPTYPE CONSOLE} uses SysUtils; function poleTrojkata(a,h:real):real; begin result:= a*h/2; end; // procedure ptr(a,h:real;var pole:real); begin pole:= a*h/2; end; // var p:real; begin //wykorzystanie funkcji PoleTrojkata writeln('Pole trojkata=',poleTrojkata(3,4):0:4); //to samo z wykorzystaniem procedury ptr ptr(3,4,p); writeln('Pole trojkata=',p:0:4); readln end.

Typ zbiorowy to zbiór potęgowy danego typu porządkowego, czyli zbiór wszystkich podzbiorów tego typu. Zmienna typu zbiorowego może zatem zawierać zbiór pusty, jedno- lub wieloelementowy. Definicja typu zbiorowego: type nazwa_typu = set of typ_porządkowy ; typ zbiorowytyp bazowy Typ zbiorowy Liczba elementów nie może przekraczać 256 – czyli typ bazowy może być : typem Byte (podtyp liczb całkowitych – zakres 0 do 255), okrojonym całkowitym, np znakowym (w tym okrojonym np. 'a'..'z' ) wyliczeniowym logicznym Zmienna typu zbiorowego zawierać może dowolny podzbiór elementów typu bazowego, od zbioru pustego do zbioru zawierającego wszystkie elementy.

Czyli: Zmienna typu integer może mieć wartość 1 lub 100 a nie może jednocześnie 1 i 100! Zmienna typu array może zawierać wiele wartości, ale zawsze ma statyczny rozmiar i nawet jak komórki są puste, to rezerwują pamięć komputera Zmienna typu zbiorowego może zawierać zero, jedną lub wiele wartości z danego zbioru type liczby: ; var zbior: set of liczby; Zmienne typu zbiorowego

type dni = set of (pon,wto,sro,czw,pia,sob,nie) ; znaki = set of 'a'..'z' ; miesiac = (sty,lut,mar,kwi,maj,cze,lip,sie,wrz,paz,lis,gru) ; zbior_miesiecy = set of miesiac ; varnazwa_miesiaca : miesiac ;//zmienna typu wyliczeniowego zbior_nazw : zbior_miesiecy ; //zmienna typu zbiorowego Przykłady definicji typu zbiorowego: UWAGA: nazwa_miesiaca może przyjąć wartość tylko jednej z nazw – typ wyliczeniowy; zbior_nazw może przyjąć wartość dowolnego podzbioru z nazw bazowych – typ zbiorowy

Zmiennych typu zbiorowego nie wolno używać w instrukcjach czytania i wyprowadzania wyników, używa się ich jedynie w operacjach wykonawczych, testujących itp. Operacje logiczne wykonywane na zbiorach to relacje (porównania): A = B równość zbiorów, te same elementy w obu zbiorach, A Bróżność zbiorów, różne elementy w obu zbiorach (chociaż niektóre mogą się powtarzać) A <= Bzawieranie zbioru A w zbiorze B (true jeśli każdy element zbioru A jest w zbiorze B) A >= Bzawieranie zbioru B w zbiorze A (true jeśli każdy element zbioru B jest w zbiorze A) c in A czy element c jest w zbiorze A

[lista wartości podzbioru]np. [1, 5, 7], [okrojenie ze zbioru]np. [1..3], lub łącznie: np. [1..3, 5, 7], Wartości stałych typu zbiorowego zapisujemy w nawiasach kwadratowych w postaciach: Stałe typu zbiorowego

type Tx=(alfa, beta, gamma, delta) ; {typ wyliczeniowy} Ty=1..10; {typ okrojony} var zm1 : set of Tx ; zm2 : set of Ty; begin zm1 := [alfa, beta] ; {lista - wybór podzbioru alfa, beta} zm1 := [alfa..gamma] ; {okrojenie - wybór podzbioru alfa, beta, gamma} zm2 := [1,4, 6..8] ; { w zbiorze są } {.. dalsza część programu} end. Przykład 1:

program zbiory; type miesiace = set of ; var v, x, y, z: miesiace ; lit: char ; begin x :=[1..12] ; {cały rok} y := [1..6] ; {pierwsze półrocze} z := [1, 3, 5, 7, 8, 10, 12] ; {miesiące posiadające 31 dni} lit := 'a' ; if x<>y then writeln('tak') else writeln('nie');{tak} if x<=y then writeln('tak') else writeln('nie'); {nie} if x>=y then writeln('tak') else writeln('nie'); {tak} if x = y then writeln('tak') else writeln('nie'); {nie} if 1 in x then writeln('tak') else writeln('nie'); {tak} if 9 in z then writeln('tak') else writeln('nie'); {nie} if lit in ['a'..'z'] then writeln('tak') else writeln('nie'); {tak} readln; end. Przykład 2:

Czcionka w aplikacjach Windows var x: set of (italic, pogrubiony, podkreslony); begin x:= [ ]; x:= [italic, podkreslony]; x:= [italic, pogrubiony]; x:= [podkreslony]; //… Przykład 3:

+suma zbiorów –różnica zbiorów  iloczyn zbiorów ( zbiór wspólny!!! ) Przykład: type zbiorowy = set of 1..6 ; var x, y, v : zbiorowy ; begin x :=[2, 3, 4] + [4, 5, 6] ;{wynik[2,3,4,5,6] } y := [2, 3, 4] - [4, 5, 6] ;{wynik[2,3] } v := [2, 3, 4] * [4, 5, 6] ;{wynik[4](zbiór wspólny) } y := v * x ;{ przeanalizować wynik} {….} end. Operatory działań na zmiennych typu zbiorowego (znaczenie jak w teorii mnogości):

Algorytmy rekurencyjne Wiele problemów obliczeniowych można zdefiniować rekurencyjnie. Rekurencja oznacza takie zdefiniowanie zagadnienia, gdzie w trakcie formułowania definicji odwołujemy się do niej samej. Przykładem definicji rekurencyjnej może być zapis całkowitej, nieujemnej potęgi rzędu n liczby rzeczywistej x: x n-1 *xdla n > 0(tu użycie definiowanej potęgi) 1dla n = 0 x n =

Rekurencja w językach programowania jest realizowana za pomocą podprogramów wywołujących kolejno same siebie ze zmienianymi parametrami wywołania. Aby podprogramy rekurencyjne działały poprawnie powinny zawierać warunek zakończenia rekurencji, aby wywołanie wykonywane było skończoną liczbę razy. Rekurencja daje proste programy lecz ma także wadę: każde wywołanie podprogramu wymaga wykonania przez procesor dodatkowych czynności, co spowalnia działanie programu oraz powoduje odłożenie na stos systemowy dużej liczby danych

program rekurencja; function potega (x:real ; n:integer):real ; { funkcja wyznacza n-tą potęgę n dla liczby x } begin if n=0 then potega := 1 else potega := potega (x, n – 1)*x ; {w definicji funkcji wykorzystanie samej funkcji} end ; var x:real; begin {program główny} x:= potega (2,10) ; {obliczenie 2 do potegi 10} writeln('2 do potegi 10=', x:10:0); readln; end.

program silnia1; function silnia_x (x: integer): longint ; {zastosowano typ longint ze względu na duże wartości funkcji silnia} begin if x = 1 then silnia_x := 1 else silnia_x := silnia_x(x-1)*x ; end ; //przykładowe użycie var alfa : integer ; begin alfa:=5; write( 'Silnia wynosi:',silnia_x(alfa)); readln; end.

Podstawowe cechy programowania obiektowego

Programowanie strukturalne (proceduralne) – koncepcja tradycyjna. Główną jego składową są instrukcje działające na danych. Złożone programy korzystają z funkcji, procedur (także modułów) w celu uproszczenia zarządzania i kontroli nad programem, lecz nie zmienia to podstawowej koncepcji.

■ dane są powszechnie dostępne – łatwo o błędy, ■ sekwencyjność wykonywania programu, ■ wszystkie sytuacje trzeba przewidywać i obsługiwać, ■ konieczność testowania po każdej zmianie, ■ wiele instrukcji, obszerny kod, trudność zrozumienia algorytmu Wady programowania strukturalnego

Zauważono „Kryzys oprogramowania” – programowanie strukturalne utrudnia panowanie nad bardzo złożonymi systemami informatycznymi SI (rozwój sprzętu wyprzedzał techniki budowania SI). Potrzebne były metody zwiększające wydajność i systematyczność tworzenia SI,a następnie ich wydajność. Poza tym powstały interfejsy graficzne (Windows)! Korzenie technologii obiektowej – lata 60-te, Nygaard i Dohl, Simula 1, Simula67 (1967).

OBIEKTOWOŚĆ – filozofia tworzenia na podstawie rzeczywistych zjawisk otaczającego świata (nie tylko język programowania). Obiekty (świata rzeczywistego a także systemu operacyjnego komputera – plik, ikona, przycisk, okno) – mają swoje właściwości statyczne (nazwa, kolor itp.) a także zbiory operacji na nich czy przez nie wykonywanych.

nie określa się jednak sposobów operacji na tablicach (np. dodawanie tablic), trzeba do tej operacji tworzyć własne kody lub korzystać z bibliotecznych procedur, których użycie wymaga szczegółowego zapoznania się z zestawem parametrów formalnych (sposób użycia). ■ wymiar ■ rozmiar ■ typ przechowywanych danych Np. typ tablica ma swoje cechy – atrybuty:

Stworzono tzw. ADT – abstrakcyjny typ danych – podążanie w kierunku naturalnego języka (zbliżenie do rzeczywistości), nazwano modułem (język Modula) lub klasą (język Simula). System reaguje na zdarzenia („siły sprawcze”), efektem są procesy: ■ funkcje przetwarzania parametrów obiektów ■ przesyłu informacji między obiektami ■ oddziaływania jednych obiektów na inne

Programowanie zorientowane obiektowo (OOP – Object Oriented Programming) umożliwia przedstawienie problemu w postaci logicznie powiązanych ze sobą struktur danych zwanych obiektami, wymieniających informacje między sobą. PROGRAMOWANIE OOP – podstawowe pojęcia „Obiektowość” opiera się na koncepcyjnym (intuicyjnym) klasyfikowaniu rzeczywistości. Na świat składają się obiekty i procesy w nich zachodzące.

KLASA = typ obiektowy=encja (entity) OBIEKT = instancja w klasie = reprezentacja w klasie Podobnie jak typ zmiennej i zmienna Koncepcje (pojęcia)

Klasa (typ obiektowy) jest to złożona struktura danych o określonej liczbie atrybutów. Atrybuty klasy dzielimy na: pola metody

pola (fields) – atrybuty (właściwości opisane wartościami dowolnych typów, także strukturalnych) Pole jest to zmienna, która może być różnego typu. metody (methods) – procedury i funkcje wykonywane na polach. Metoda jest czynnością wykonywaną na obiekcie w postaci procedury lub funkcji. Metoda obiektu operuje na polach (danych) obiektu, przy ich pomocy mamy dostęp do pól. Czyli można powiedzieć, że typ obiektowy to typ rekordowy poszerzony o metody

Metoda jest to procedura lub funkcja mająca deklarację w ramach typu obiektowego (sam nagłówek procedury lub funkcji). Definicja metody występuje poza definicją typu obiektowego i po niej. W nagłówku definicji nazwa jest kwalifikowana, czyli wskazuje na obiekt, którego dotyczy i ma postać: nazwa_typu_obiektowego.nazwa_metody(argumenty).. identycznie jak w zmiennych rekordowych

//definicja klasy typeTpies = class //definicja składowych klasy imie:string; wiek:integer; rasa:string; procedure szczekaj(glos:string); end; //definicja metody dla klasy Tpies procedure Tpies.szczekaj(glos:string); begin write(glos); end; //zmienne – instancje w klasie var burek, rasowy :Tpies; begin burek.szczekaj('hau'); readln; end. Przykład

//definicja klasy typeTczlowiek= class //definicja pól imie:string; wiek:integer; waga:real; procedure jedz(obiad:real); end; //definicja metody dla klasy Tczlowiek procedure Tczlowiek.jedz(obiad:real); begin Tczlowiek.waga:=Tczlowiek.waga+obiad/20; end; aktywowanie metody jedz wpłynie na wagę obiektu klasy czlowiek Inny przykład

Konstruktor – specjalna metoda używana przy tworzeniu (instancji) obiektu danej klasy – zmienna typu obiektowego Destruktor – specjalna metoda wywoływana automatycznie tuż przed zakończeniem istnienia obiektu Istotna własność OOP – nawet jeśli nie są zdefiniowane zmienne obiektowe (instancje klasy), program może je tworzyć, prztwarzać, a także niszczyć.

Poziomy dostępu do składników klasy Private – pola i metody ukryte, niewidzialne poza klasą, chyba, że w tym samym module Public – pola i metody dostępne Protected - pola i metody dostępne tylko dla potomków

Cechy obiektowości hermetyzacja polimorfizm dziedziczenie

Własność polegająca na dostępie do pól jedynie przy użyciu metod nazywa się hermetyzacją. Tworzy to dyscyplinę programowania, w jednym miejscu mamy dane i dozwolone operacje na nich. Ułatwia kontrolę poprawności złożonych programów. HERMETYZACJA

DZIEDZICZENIE niezależny, (zdefiniowany podobnie jak typ rekordowy) – rodzic drzewa jako potomek istniejącego. Wtedy mówimy, że obiekt dziedziczy wszystkie elementy (pola i metody) swojego przodka lub jest typem potomnym. Obiekty potomne mogą mieć własnego potomka (lub wielu). Typ obiektowy może on być:

Dziedziczność bezpośrednia – przodek jest niezależny (sam nie ma przodka) Dziedziczność pośrednia – przodek już dziedziczy (sam ma przodka) Wzajemne zależności obiektów układają się w drzewo hierarchii obiektów. typepolozenie = class{obiekt niezależny} x:integer; y:integer; end; punkt = class (polozenie){obiekt potomny} widocznosc: Boolean; end; Przykład dziedziczenia klas:

Potomek może mieć tę samą nazwę metody jak przodek, „przykrywa” ona wówczas metodę przodka. Definiując metodę potomka (rozwijając ją lub modyfikując, np. gdy jest ona rozszerzeniem metody nadrzędnej), można odwołać się do metody dziedziczonej od przodka. Jest to tzw. POLIMORFIZM Polimorfizm (wielopostaciowość) - wykorzystanie tzw. metod wirtualnych. POLIMORFIZM

typepolozenie = class{obiekt niezależny} x:integer; y:integer; procedure przesun (nx, ny: Integer); end; procedure polozenie.przesun(nx, ny: Integer); begin x:=nx; y:=ny; end; Przykład:

obiekty wbudowane (użytkowe) są zazwyczaj komponentami graficznymi: okna, kontrolki itp., ale nie tylko. Istnieje pewna grupa klas zdefiniowanych w Delphi – hierarchia klas Aplikacja "okienkowa" W DELPHI

Wykorzystywanie gotowych obiektów w aplikacji okienkowej - projektowanie okienka (umieszczanie elementów) pobieranych z paska narzędziowego - napisanie procedur dla obsługi zdarzeń

procedure TForm1.Button1click(Sender:TObject); begin //zmiana właściwości Form1.Color:= rgb( 255, 0, 0); Form1.Font.size:= 14; end; procedure TForm1.Button2Click(Sender: TObject); begin //wykonanie metody Label1.Hide; end; procedure TForm1.Button3Click(Sender: TObject); begin //wykonanie metody Label2.Show; end;

STRUKTURY DYNAMICZNE Cel podstawowy – oszczędność pamięci, sami decydujemy o długości struktury (np. tablice są statyczne – mają stałe rozmiary bez względu na zakres wykorzystania) ZASADY Do zbioru (uporządkowanego według określonej metody) możemy dołączać nowe elementy. Rozmiar zbioru nie jest zdefiniowany, każde dołączanie nowego elementu powoduje nową rezerwację pamięci. Pobieranie elementu (usuwanie), dołączanie nowego – mogą być obarczone pewnymi kryteriami dostępu.

Lista jednokierunkowa dane adresdane adres dane adres dane nil koniec musi być znane wskazanie (adres) p początku listy

type TypDanych = String[44]; Wskaznik =^ElementListy; ElementListy = record D : TypDanych; Nastepny : Wskaznik end; typ "wskaźnikowy" Jest to definicja rekurencyjna, bo: wcześniej jest definiowany typ wskaźnikowy, korzystający z nieznanej jeszcze definicji elementu listy następnie jest definiowany rekord, którego jedno z pól jest wcześniej definiowanego typu wskaźnikowego

Lista jednokierunkowa może być "w przód" lub "wstecz", czyli element może zawierać wskaźnik na następny lub poprzedni element. Tworzenie nowego elementu polega na stworzeniu nowego początku, czyli: var q : Wskaznik; begin New (q); { Tworzymy nowy element, na razie nie związany z listą } q^.N := p; { będzie on wskazywał na stary "początek" } p := q; { teraz początkiem jest stworzony element} q^.D := Dane {wpisujemy dane, które będą w nim przechowywane } end.

Lista dwukierunkowa liniowo uporządkowany zbiór składników, w którym dla każdego składnika, poza pierwszym i ostatnim, jest określony składnik poprzedni i następny. Dla ostatniego składnika listy dwukierunkowej jest określony tylko składnik poprzedni, a dla pierwszego tylko następny. Inne struktury dynamiczne dane wskaźnik na poprzedni wskaźnik na następny

Stos (stack) to struktura danych, składająca się z liniowo uporządkowanych zbiorów składników (elementów), z których tylko ostatnio dołączony jest w danej chwili dostępny. Miejsce dostępu to wierzchołek stosu. Jest to jedyne miejsce, do którego można dołączyć lub z którego można usunąć elementy. FILO lub LIFO first in – last out last in - first out

jest strukturą danych, składającą się z liniowo uporządkowanych zbiorów składników, do której można dołączyć składnik tylko na jednym końcu (koniec kolejki), a usunąć tylko w drugim końcu (początek kolejki). Powiązanie między składnikami kolejki jest takie samo jak pomiędzy składnikami stosu. FIFO first in – first out Kolejka (queue)

jest strukturą danych, składającą się nieliniowo uporządkowanych zbiorów składników. Do każdego składnika można dołączyć jeden lub dwa składniki. Drzewo ma swój "korzeń" z którego wyrasta struktura. Drzewo binarne Drzewo binarne, w którym liczba synów każdego wierzchołka wynosi albo zero albo dwa, nazywane jest drzewem regularnym dane wsk_lewe wsk_prawe dane wsk_lewe nil dane wsk_lewe wsk_prawe dane nil dane nil dane nil

KONIEC