wykład 3

32
Wykład 3 Informatyka II MPZI2 sem.letni

Upload: georgia-kemp

Post on 31-Dec-2015

24 views

Category:

Documents


0 download

DESCRIPTION

Informatyka II MPZI2 sem.letni. Wykład 3. Operatory dzia ł a ń na zmiennych typu zbiorowego (znaczenie jak w teorii mnogo ś ci ):. + suma zbiorów – ró ż nica zbiorów  iloczyn zbiorów ( część wspólna ). Przykład:. type zbiorowy = set of 1..6 ; var x , y, v : zbiorowy ; - PowerPoint PPT Presentation

TRANSCRIPT

Wykład 3

Informatyka II

MPZI2 sem.letni

+ suma zbiorów– różnica zbiorów iloczyn zbiorów (część wspólna)

type zbiorowy = set of 1..6 ;var x , y, v : zbiorowy ;beginx :=[2, 3, 4] + [4, 5, 6] ; {wynik [2,3,4,5,6] }y := [2, 3, 4] - [4, 5, 6] ; {wynik [2,3] (usuwanie ze zbioru) }v := [2, 3, 4] * [4, 5, 6] ; {wynik [4] (część wspólna) }y := v * x ; { przeanalizować wynik}end .

Operatory działań na zmiennych typu zbiorowego

(znaczenie jak w teorii mnogości):

Przykład:

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:

xn-1*x dla n > 0 (tu użycie definiowanej potęgi)

1 dla n = 0 xn =

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 rekur;function potega_n (x:real ; n:integer):real ;{ funkcja wyznacza n-tą potęgę n dla liczby x }

beginif n=0 then potega_n := 1else potega_n := potega_n(x, n – 1)*x ; {w definicji funkcji wykorzystanie samej funkcji}

end ;var x:real;

begin {program główny}x:= potega_n (2,10) ; {obliczenie 210}writeln(x);readln;

end.

program sil;

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.

STRUKTURY DYNAMICZNECel podstawowy – oszczędność pamięci

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

daneadres dane

adres daneadres dane

nil

koniec

musi być znane wskazanie (adres) p początku listy

Lista jednokierunkowa może być "w przód" lub "wstecz", czyli element może zawierać wskaźnik na następny lub poprzedni element.

Lista dwukierunkowaliniowo 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.

FIFOfirst 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

danewsk_lewewsk_prawe

danewsk_lewenil

danewsk_lewewsk_prawe

danenilnil

danenilnil

danenilnil

Podstawowe cechy programowania obiektowego

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.

Programowanie strukturalne (proceduralne) – to koncepcja

tradycyjna

■ 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

• służy do nauki programowania• niewygodne• nie przystaje do obecnych systemów operacyjnych

obiektowych (komponentowych)

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, Nygaardi 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.

Koncepcja (pojęcie) "klasy"KLASA= typ obiektowy=encja (entity)OBIEKT = reprezentacja w klasie = instancja

Podobnie jak typ zmiennej i zmienna

Pojazd – klasa abstrakcyjnaSamochód – klasa dziedzicząca

KLASA - zbiór obiektów „przefiltrowanych” przez definicję typu obiektowego - sklasyfikowanych do tego typu.

Typ obiektowy jest to złożona struktura danych o określonej liczbie atrybutów. Atrybuty dzielimy na pola i 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 obiekciew postaci procedury lub funkcji. Metoda obiektu operuje na polach (danych) obiektu, przy ich pomocy mamy dostęp do pól.

Czyli 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ć:

procedure nazwa_typu_obiektowego.nazwa_metody

z kropką, jak w rekordach

Własność polegająca na dostępie do pól jedynie przy użyciu metod nazywa się hermetyzacją.

Ułatwia kontrolę poprawności złożonych programów.

Zwykle właściwości są prywatne (private) a metody publiczne (public)

Hermetyzacja

DZIEDZICZENIE

• niezależny, (zdefiniowany podobnie jak typ rekordowy)

• 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)

type x= class//definicja

end

Dziedziczność pośrednia – przodek już dziedziczy (sam ma przodka)

type y=class(x)//definicjaend;

Wzajemne zależności obiektów układają się w drzewo hierarchii obiektów.

type polozenie = class{obiekt niezależny}x:integer;y:integer;

end;

punkt =class (polozenie) {obiekt potomny}widocznosc: Boolean;

end;

Obsługa zdarzeń:

Można zdefiniować obsługę zdarzenia dla obiektu – metodę obsługi

Np. co robić na kliknięcie (zdarzenie) dla ikony (obiektu)

type TProstokat = class private Lewy:Integer; Prawy:Integer; Gorny:Integer; Dolny:Integer;

public procedure podajPunkty(var A,B,C,D:Integer); function PodajSzerokosc:Integer; function PodajWysokosc:Integer; procedure UstawProstokat(L,G,P,D:Integer);

end; //koniec definicji klasy

//teraz definicja metod

procedure TProstokat.PodajPunkty(var A,B,C,D:integer); begin A:=Prawy ; B:=Lewy; C:= Gorny; D:=Dolny; end; function TProstokat.PodajSzerokosc:Integer; begin Result:=Prawy-Lewy end; function TProstokat.PodajWysokosc:Integer; begin Result:=Dolny-Gorny; end; procedure TProstokat.UstawProstokat(L,G,P,D:Integer); begin Prawy:=P; Lewy:=L; Gorny:=G; Dolny:=D; end;

var p1,p2:TProstokat; a,b,c,d:integer;

begin //program główny writeln('P1'); p1:=TProstokat.Create; //tworzenie obiektu p1.UstawProstokat(20,20,100,100);//METODA - PROCEDURA p1.podajPunkty(a,b,c,d); //METODA - FUNKCJA writeln(a); writeln(b); writeln(c); writeln(d); writeln('Szerokosc=',p1.PodajSzerokosc); //METODA - FUNKCJA writeln('Wysokosc=',p1.PodajWysokosc); //METODA - FUNKCJA//zmiana danych p1 writeln('Inny P1'); p1.UstawProstokat(0,0,34,34); p1.podajPunkty(a,b,c,d); writeln(a); writeln(b); writeln(c); writeln(d); writeln('Szerokosc=',p1.PodajSzerokosc); writeln('Wysokosc=',p1.PodajWysokosc);

readln;end.