WYKŁAD 5 Zastosowanie teorii grup w analizie widm oscylacyjnych
Wykład 5
-
Upload
lucius-williamson -
Category
Documents
-
view
35 -
download
2
description
Transcript of Wykład 5
Programowanie strukturalne (proceduralne) – koncepcja tradycyjna.
Główną jego cechą są instrukcje działające na danych.
Złożone programy korzystają z funkcji, procedur 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)!
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 (możliwych do wykonania na nich czy przez nie wykonywanych).
Korzenie technologii obiektowej – lata 60-te, Nygaard i Dohl, języki Simula 1, Simula67 (1967).
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 =reprezentacja w klasie = instancja w klasie
Podobnie jak typ zmiennej i zmienna
KLASA - zbiór obiektów „przefiltrowanych” przez definicję typu obiektowego - sklasyfikowanych do tego typu.
KLASA - zbiór właściwości i funkcji (METOD) charakterystycznych dla pewnego zbioru obiektów
Definicje
Koncepcja (pojęcie) jest wyobrażeniem lub oznaczeniem stosowanym do rzeczy lub obiektów w naszej świadomości (Martin)(Encja = byt pojęciowy, konceptualny)
Przykład 1: klasyfikacja obiektów
materialne: osoba, samochód
niematerialne (abstrakcyjne): firma, czas,
role: pacjent, nauczyciel,
relacyjne: małżeństwo, posiadanie
zdarzeniowe: sprzedaż, wysłanie
inne: zestaw, ikona, sygnał, proces
W DELPHI – obiekty użytkowe są zazwyczaj komponentami graficznymi: okna, kontrolki itp., ale nie tylko.
Istnieje pewna grupa klas zdefiniowanych w Delphi– hierarchia klas
TObject
TPersistent
TGraphic TComponent TCanvas TPicture TStrings
TGraphicControl
TMenuItem TMenu TControlTScreen TGlobalComponent
TWinControl TApplication
TCustomEdit TCustomComboBox TCustomListBox TButtonControl
TCustomControl TScrollingWinControl
TFormformularz - "okno" Windows
rodzic
potomek
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.
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
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ć:
Potomek może mieć zdefiniowaną metodę o takiej samej nazwie 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
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.
type polozenie = class {obiekt niezależny}x:integer;y:integer;
end;
punkt = class (polozenie) {obiekt potomny}widocznosc: Boolean;
end;
Przykład:
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
identycznie jak w zmiennych rekordowych
type polozenie = 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:
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
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, nawet jeśli w innym module, umieszczonym na liście USES
Protected - pola i metody dostępne tylko dla potomków
W programach komputerowych
Wykonywanie metod obiektowych z reguły – jako reakcja na pewne zdarzenia (Events)Obiekty wizualne posiadają pewne zbiory zdarzeń np. OnClick, OnPress, OnDrag itp.
Inicjacja metod obiektowych powinna być związana z wystąpieniem zdarzeń
Tworzenie własnego typu obiektowego (klasy)
type TPunkt = class x:Integer; y:Integer; procedure przesun(dx,dy:Integer);
constructor Create(Sender: TObject);destructor Destroy;override;
end; //koniec definicji typu
var p: TPunkt; //zmienna typu obiektowego
Definicja klasy
Przykład
constructor TPunkt.create(Sender:TObject);//konstruktor begin inherited create; end;
destructor TPunkt.destroy; //destruktor begin inherited destroy; end;
procedure TPunkt.przesun(dx, dy: Integer); begin
x:=x+dx;y:=y+dy;
end;
procedure TForm1.Button1Click(Sender: TObject);begin p:=TPunkt.create(self); p.x:=30; p.y:=40; edit1.Text:=IntToStr(p.x); edit2.Text:=IntToStr(p.y);end;
procedure TForm1.Button2Click(Sender: TObject);begin p.przesun(4,4); edit1.Text:=IntToStr(p.x); edit2.Text:=IntToStr( p.y);end;
Przykład aplikacji "okienkowej" - umieszczamy komponenty w oknie
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Edit1: TEdit; Label1: TLabel; MainMenu1: TMainMenu; Kolor1: TMenuItem; Szeroko1: TMenuItem; Przesu1: TMenuItem; Widok1: TMenuItem; Zamknij1: TMenuItem; Label2: TLabel; PopupMenu1: TPopupMenu; Zamknij2: TMenuItem; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject);end;var Form1: TForm1;
implementation
procedure TForm1.Button2Click(Sender: TObject);begin Button1.Width:=400; //zmiana wartości pola innego obiektuend;
procedure TForm1.Button3Click(Sender: TObject);begin Button1.Visible := not Button1.Visible;//zmiana widocznościend;
procedure TForm1.Button4Click(Sender: TObject);begin Button1.Left:=Button1.Left+20; //zmiana wartosci pola innego obiektuend;
procedure TForm1.Button5Click(Sender: TObject);begin Edit1.Clear;//wyczyszczenie pola Editend;
procedure TForm1.Button6Click(Sender: TObject);begin Form1.Close; //inicjacja metody zamknięciaend;end.
STRUKTURY DYNAMICZNE
Cel podstawowy – oszczędność pamięci, sami decydujemy o długości struktury (np. tablice mają niestety stałą wielkość)
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
adres dane
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 // tu stara lista z początkiem p New (q); { Tworzymy nowy element, na razie nie związany z listą } q^.N := p; { pole N wskazać ma na stary "początek" } p := q; { teraz początkiem jest stworzony element} q^.D := 'tekst' {wpisujemy dane, które będą w nim przechowywane }// kontynuacja end;
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 na 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ć zero, 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