Informatyka
Algorytmy i programowanie
Wykład 5-6
Struktury danych
Programowanie obiektowe
Jerzy Duda, 2010
Struktury danych
Struktury danych (ang. data structure) sposób uporządkowania
informacji w komputerze; na strukturach danych operują algorytmy
Przykładowe popularne struktury danych:
rekord (ang. structure, record)
tablica
lista
stos
kolejka
grafy
drzewo i jego liczne odmiany (np. drzewo binarne)
zbiory, mapy, słowniki
klasy/obiekty
Jerzy Duda, WZ AGH, 2009-2010
1
Rekord
Rekord (zwany w niektórych językach strukturą) to obiekt
programistyczny, grupa danych tego samego lub ró\nego typu
Posiada ustaloną strukturę, oraz mo\liwość odczytania i zmiany jego
elementów
Składową rekordu mo\e być inny rekord
Składową rekordu mo\e być tak\e tablica
Przykładowa struktura:
Numer_albumu integer
Imię string
Nazwisko string
Data_urodzenia DateTime
Adres_zamieszkania string
Rok_studiów integer
Średnia_ocen float
Jerzy Duda, WZ AGH, 2009-2010
Rekordy w VBA
Zło\one typy danych mo\na definiować poprzez słowo kluczowe w
bloku Type ... Type End
Type Osoba
Imię As String
Nazwisko As String
Rok_studiów As Integer
End Type
Sub test()
Dim os As Osoba
os.Imię = "Jan"
os.Nazwisko = "Kowalski"
os.Rok_studiów = 1
MsgBox os.Imię
End Sub
Jerzy Duda, WZ AGH, 2009-2010
2
Rekordy w VBA (tablica rekordów)
W bloku Type ... Type End mo\na stosować tablice oraz wcześniej
zdefiniowane rekordy
Type Grupa
Prowadzący As String
Studenci(1 To 15) As Osoba
End Type
Sub test2()
Dim gr1 As Grupa
gr1.Prowadzący = "Duda"
gr1.Studenci(1).Imię = "Anna"
gr1.Studenci(1).Nazwisko = "Anna"
gr1.Studenci(2).Imię = "Jan"
gr1.Studenci(2).Nazwisko = "Kowalski"
gr1.Studenci(3).Imię = "Adam"
gr1.Studenci(3).Nazwisko = "Kwiecień"
MsgBox g1.Studenci(1).Imię(2)
End Sub
Jerzy Duda, WZ AGH, 2009-2010
Lista
Lista jest uporządkowaną kolekcją elementów zapewniającą dostęp
do dowolnego elementu
W przeciwieństwie do tablicy rozmiar listy mo\e się zwiększać lub
zmniejszać w miarę potrzeby
Ka\da lista musi implementować przynajmniej 4 operacje
insert wstawia element na wskazaną pozycję listy i zwiększa rozmiar
listy o 1
delete usuwa element ze wskazanej pozycji listy i zmniejsza jej
rozmiar
get zwraca wartość elementu znajdującego się na wskazanej pozycji
size zwraca rozmiar listy
Wszystkie pozostałe operacje mogą być zaimplementowane na
bazie tych 4 operacji
Np. zmiana wartości elementu na wskazanej pozycji set
kombinacja delete i insert; add dołączenie elementu na końcu listy
(kombinacja size i insert)
Jerzy Duda, WZ AGH, 2009-2010
3
Lista implementacja (1)
Listy implementuje się na 2 podstawowe sposoby
listy tablicowe oparte na tablicach
listy wiązane oparte na wskaznikach
Lista tablicowa wykorzystuje tablicę do przechowywania elementów
Odczyt i modyfikacja elementów jest bardzo prosta
Operacje wstawiania i usuwania wymagają natomiast przesuwania
(kopiowania) elementów
Ponadto zwiększenie rozmiaru tablicy wymaga ka\dorazowego
utworzenia nowej większej tablicy i skopiowania do niej całej
zawartości listy
Implementacja tablicowa jest efektywna w przypadku, gdy dostęp do
listy odbywa się na podstawie indeksów lub w sposób sekwencyjny
Jerzy Duda, WZ AGH, 2009-2010
Lista implementacja (2)
Lista wiązana stanowi łańcuch elementów połączonych ze sobą
wskaznikami
Ka\dy element posiada wskaznik na elementy poprzedni i następny
indeks 1 indeks 2
indeks 0
następny (next) następny (next)
A B C
poprzedni (previous) poprzedni (previous)
Jest to lista podwójnie wiązana (dwukierunkowa)
Wstawianie i usuwanie elementów w takiej liście wymaga jedynie
modyfikacji wskazników
Problemem jest natomiast dostęp do elementu na wskazanej pozycji
wymaga to przeglądania łańcucha wskazników
Jerzy Duda, WZ AGH, 2009-2010
4
Kolekcje w VBA (1)
Listę tablicową mo\na zaimplementować w VBA za pomocą
obiektu Collections
1. Nale\y zadeklarować obiekt kolekcji
Dim KolekcjaOsób As Collection
2. Następnie utworzyć obiekt kolekcji
Set KolekcjaOsób = New Collection
Do kolekcji obiekty dodawane są metodą Add (kolekcja sama się
powiększa)
Sub test3()
Dim KolekcjaOsób As Collection
Set KolekcjaOsób = New Collection
KolekcjaOsób.Add "Jan Kowalski"
KolekcjaOsób.Add "Anna Nowak"
End Sub
Jerzy Duda, WZ AGH, 2009-2010
Kolekcje w VBA (2)
Dostęp do poszczególnych obiektów właściwość Item
Ilość elementów mo\na odczytać poprzez właściwość Count
Obiekty mo\na usuwać metodą Remove
Sub test4()
Dim Kolekcja2 As Collection
Set Kolekcja2 = New Collection
Kolekcja2.Add "Jan Kowalski"
Kolekcja2.Add "Anna Nowak"
Kolekcja2.Add "Ewa Maj"
MsgBox Kolekcja2.Count
MsgBox Kolekcja2.Item(2)
Kolekcja2.Remove(1)
MsgBox Kolekcja2.Count
End Sub
Jerzy Duda, WZ AGH, 2009-2010
5
Stos
Stos (ang. Stack) jest listą, której elementy dostępne są tylko z
jednego końca
Kraniec stosu, do którego mo\na dołączać elementy i z którego
mo\na je pobierać nazywany jest wierzchołkiem stosu
Wierzchołek
C
B
A
Stos mo\e być rozpatrywany tak\e jako kolejka LIFO (Last-In, First-Out)
Podstawowe operacje wykonywane na stosie
push odło\enie elementu na stos; zwiększenie rozmiaru o 1
pop zdjęcie elementu z wierzchołka; zmniejszenie rozmiaru o 1
size zwraca liczbę elementów na stosie
Jerzy Duda, WZ AGH, 2009-2010
Stos implementacja i wykorzystanie
Stos mo\na zaimplementować wykorzystując
tablice
listy
Przykłady wykorzystania stosów
wie\e Hanoi
(2+3)*5 2
kalkulator wykorzystujący odwrotną notację polską
3
odwracanie wyrazów w ciągu
+
stos wywołań (call stack) 5
*
przetwarzanie dokumentów XML
zarządzanie ekranami aplikacji (Wstecz, Dalej)
wycofywanie i ponawianie wykonanych operacji
Jerzy Duda, WZ AGH, 2009-2010
6
Kolejka
Kolejka (ang. Queue) to lista, której elementy przechowywane są w
sposób umo\liwiający ich przetwarzanie w określonej kolejności
Najczęściej kolejność pobierania elementów z kolejki to\sama jest
z kolejnością ich umieszczania (zasada FIFO First-In First-Out)
W przeciwieństwie do listy, z której mo\emy pobierać dowolny
element, w danej chwili dostępny jest tylko element z czoła kolejki
Podstawowe operacje kolejkowe
enqueue umieszcza element w kolejce; rozmiar zostaje zwiększony o 1
dequeue pobiera element z czoła kolejki; rozmiar zostaje zmniejszony
size zwraca rozmiar kolejki
Funkcjonowanie kolejek często opisywane w kategoriach producenta i
konsumenta
kolejka
Konsument
Producent
Konsument
Producent
Jerzy Duda, WZ AGH, 2009-2010
Kolejka implementacja
i wykorzystanie
Kolejkę najłatwiej zaimplementować za pomocą listy
Kolejki mogą być ograniczone (liczba elementów znajdująca się w
kolejce nie mo\e przekraczać określonej wartości) lub nieograniczone
Przykłady wykorzystania kolejek
kolejka zadań na routerze kolejka ograniczona
komunikacja międzyprocesowa i międzywątkowa kolejka blokująca
obsługa zgłoszeń np. w call center kolejka blokująca
Kolejka blokująca jest kolejką ograniczoną
W przypadku gdy producent będzie próbował dodać element do
zapełnionej kolejki, zostanie zablokowany do czasu zwolnienia miejsca
w kolejce
Call center
Konsultant
Zgłoszenie Zgłoszenie Zgłoszenie
Klient 4 Konsultant
3 2 1
Konsultant
Jerzy Duda, WZ AGH, 2009-2010
7
Kolejka priorytetowa
Kolejka priorytetowa (ang. Priority Queue) to kolejka zapewniająca
dostęp do swych elementów od największego do najmniejszego
W danej chwili dostępny jest tylko największy element
Największy oznacza pewne kryterium porządkujące (komparator)
Zwykła kolejka FIFO kryterium jest czas przebywania w kolejce
Stos (LIFO) kryterium jest moment poło\enia elementu na stosie
Podobnie jak dla zwykłych kolejek najwa\niejsze operacje to
enqueue umieszcza element w kolejce; rozmiar zostaje zwiększony o 1
dequeue pobiera element z czoła kolejki; rozmiar zostaje zmniejszony
peek udostępnia element z czoła kolejki
Jerzy Duda, WZ AGH, 2009-2010
Kolejka priorytetowa implementacja
Kolejkę priorytetową mo\na zaimplementować na wiele sposobów
Najłatwiej wykorzystać listę posortowaną, w której elementy
przechowywane są w odwrotnej kolejności priorytetów
Operacja pobrania elementu o największym priorytecie jest
natychmiastowa, natomiast operacja zakolejkowania elementu ma
liniową zło\oność
Bardziej efektywną obliczeniowo implementacją jest wykorzystanie
stogu (kopiec, ang. heap)
Stóg (inaczej kopiec, sterta) to drzewo binarne, w którym ka\dy węzeł
ma od 0 do 2 dzieci
0 X
1 M 2 K
3 E 4 A 5 E 6 A
X M K E A F D D B
0 8
7 D 8 B
Jerzy Duda, WZ AGH, 2009-2010
8
Kolejka priorytetowa implementacja
(2)
Warunek stogowy: ka\dy węzeł jest większy od większego ze swych synów
Wstawianie elementu do kolejki (wynurzanie) O(log2n)
X X X
M K M K P K
E A F D E P F D E M F D
D B P D B A D B A
Zdjęcie elementu korzenia (zatapianie) O(log2n)
X A
X P X P
P K
A K M K
E M F D
E M F D E A F D
D B
D B D B
Jerzy Duda, WZ AGH, 2009-2010
Graf (1)
Graf to struktura G=(V, E) składająca się z węzłów (wierzchołków V)
połączonych za pomocą krawędzi (E)
Grafy dzieli się na
nieskierowane
skierowane krawędzie skierowane nazywane łukami (A)
Grafy mo\na przechowywać w pamięci na kilka sposobów
macierz sąsiedztwa lista incydencji
" 1: 2,3
1 2 3 4
" 2: 1,3
1 0 1 1 0
" 3: 1,2,4
2 1 0 1 0
" 4: 3
3 1 1 0 1
4 0 0 1 0
Zło\oność pamięciowa O(V2) Zło\oność pamięciowa O(V+E)
Jerzy Duda, WZ AGH, 2009-2010
9
Graf (2)
lista krawędzi macierz incydencji
" 1 - 2
" 1 - 3
" 3 - 2
" 3 - 4
1-2 1-3 3-2 3-4 4-3
" 4 - 3
1 1 1 0 0 0
Zło\oność pamięciowa O(E2)
2 -1 0 -1 0 0
3 0 -1 1 1 -1
4 0 0 0 -1 1
Zło\oność pamięciowa O(V*E)
Jerzy Duda, WZ AGH, 2009-2010
Binarne drzewo wyszukiwawcze
Drzewo (ang. tree) jest zbiorem połączonych węzłów (ang. nodes), w ten
sposób, \e ka\dy posiada zero lub więcej węzłów-dzieci i co najwy\ej
jednego rodzica
Węzły nie posiadające dzieci nazywane są liśćmi (ang. leaves)
Drzewo binarne węzeł mo\e mieć co najwy\ej 2 dzieci (lewe i prawe)
Binarne drzewo wyszukiwacze to drzewo binarne, w którym węzły
poło\one na lewo od danego węzła są od niego mniejsze, a poło\one na
prawo większe
Warunek ten umo\liwia efektywne wstawianie, usuwanie i wyszukiwanie
węzłów w drzewie
Średni czas wyszukiwania w drzewie binarnym jest proporcjonalny do
jego wysokości (równy O(h))
W drzewie wywa\onym (ang. balanced) wysokość drzewa wynosi
O(log N)
Jerzy Duda, WZ AGH, 2009-2010
10
Binarne drzewo wyszukiwawcze (2)
korzeń
Przykładowe drzewo
lewy
prawy
I
(mniejszy)
(większy)
D L
A F K M
H P
liście
Minimum skrajny lewy węzeł (A)
Maksimum skrajny prawy węzeł (P)
Następnik węzeł o wartości bezpośrednio większej (AD, HI, IK)
Poprzednik węzeł o wartości bezpośrednio mniejszej (PM, FD,
IH)
Demo
Jerzy Duda, WZ AGH, 2009-2010
Demo
Binarne drzewo wyszukiwawcze (3)
Wyszukiwanie elementu K
I K>I I
K
schodzimy
schodzimy
po prawym
D L D L
po lewym D L
A F K M A F K M
A F K M
H P H P
H P
Wstawianie (identycznie ja wyszukiwanie)
I
D L
Usuwanie zale\y od poło\enia węzła
A F K M
H J P
Jerzy Duda, WZ AGH, 2009-2010
11
Zbiór
Zbiór (ang. set) to nieuporządkowana pula danych niedopuszczającą
do dublowania elementów
Na zbiorze wykonywane są następujące operacje
add dodaje wartość do zbioru; zwraca false jak ju\ jest
delete usuwa wartość ze zbioru
contains sprawdza czy podana wartość jest w zbiorze
size zwraca rozmiar zbioru
clear usuwa wszystkie elementy ze zbioru
F
D
L
M
I
P
K
H
A
Jerzy Duda, WZ AGH, 2009-2010
Mapa
Mapa (ang. map) to obiekt ustanawiający związek pomiędzy kluczami
a wartościami
Ka\dy klucz musi być ró\ny od pozostałych
Mapy często nazywane są słownikami (dictionaries)
Operacje wykonywane na mapach
get(klucz) odnajduje wartość skojarzoną z kluczem
set(klucz,wartość) przypisuje danemu kluczowi nową wartość
delete(klucz) usuwa wartość przypisaną do klucza
contains sprawdza istnienie klucza w mapie
size zwraca liczbę par "klucz-wartość"
123-456 555-444
clear usuwa z mapy wszystkie pary
Ala Ela
777-890
Ewa
Jerzy Duda, WZ AGH, 2009-2010
12
Tablica haszująca (1)
Tablica haszująca lub mieszająca (ang. hash table) to struktura danych
słu\ąca do przechowywania informacji, w taki sposób aby mo\liwy był do
nich szybki dostęp idealnie O(1)
Odwołania do przechowywanych obiektów dokonywane są na podstawie
klucza, który dany obiekt (informację) identyfikuje
W tablicy mieszającej stosuje się funkcję mieszającą (haszującą), która
dla danego klucza wyznacza indeks w tablicy zwany wyciągiem, skrótem
lub znacznikiem haszowania
Przykład: haszowanie łańcucha znakowego
E+L+V+I+S = 5+12+22+9+19 = 67
M+A+D+O+N+N+A = 13+1+4+15+14+14+1 = 62
S+T+I+N+G = 19+20+9+14+7 = 69
Główna wada kolizyjność
L+I+V+E+S = 12+9+2+5+19 = 67 (= ELVIS)
Jerzy Duda, WZ AGH, 2009-2010
Tablica haszująca (2)
Lepsze haszowanie łańcucha algorytm CRC (implementowane w Java)
314*E+313*L+312*V+311*I+S = 4 996 537
314*L+313*I+312*V+311*E+S = 11 371 687
W celu zredukowania rozmiaru indeksów stosuje się operator modulo
ELVIS = 4 996 537 % 17 = 16
LIVES = 11 371 687 % 17 = 13
Haszowanie doskonałe (perfect hashing) funkcja, która nie powoduje
kolizji; w rzeczywistości nieosiągalne
Rozwiązywanie kolizji
metoda łańcuchowa elementy przechowuje się nie w tablicy lecz na liście
związanej z danym indeksem
metoda adresowania otwartego je\eli jest kolizja dla nowego elementu
dodaje się wartość pewnej funkcji przyrostu (np. próbkowanie liniowe)
Jerzy Duda, WZ AGH, 2009-2010
13
Model obiektowy Excela
Jerzy Duda, WZ AGH, 2009-2010
Model obiektowy Excela (1)
Ka\dy obiekt posiada unikatowe dla niego właściwości oraz
metody
Podstawowa hierarchia obiektów w Excelu
Application obiekt aplikacji Excel
obiekt Workbooks kolekcja wszystkich obiektów Workbook
obiekt Workbook obiekt skoroszytu (mo\e być
obiekt Worksheets kolekcja wszystkich obiektów Worksheet
obiekt Worksheet obiekt arkusza Excela
Jerzy Duda, WZ AGH, 2009-2010
14
Model obiektowy VBA dla Excel (2)
Podstawowa hierarchia obiektów w Excelu (c.d.)
obiekt Sheets kolekcja wszystkich obiektów Worksheet
(arkuszy) oraz obiektów Chart (wykresów)
obiekt Worksheet obiekt arkusza Excela składa się z
kolekcji obiektów Rows poszczególne wiersze arkusza
kolekcji obiektów Columns kolumny arkusza
obiektu Range zakres komórek
Jerzy Duda, WZ AGH, 2009-2010
Model obiektowy VBA dla Excel (3)
Podstawowe metody i właściwości obiektu Worksheets
Add dodaje arkusz do arkusz
Close zamyka arkusz
Delete usuwa arkusza
Activate uaktywnia arkusz
Count podaje liczbę arkuszy
Name zwraca/ustawia nazwę arkusza
Sub test6()
MsgBox Worksheets.Count
Worksheets.Add
Worksheets(1).Name = "Test"
Worksheets("Test").Rows(1).Select
End Sub
Jerzy Duda, WZ AGH, 2009-2010
15
Model obiektowy VBA dla Excel (4)
Podstawowe metody i właściwości obiektu Range
Value odczytuje/ustawia wartość dla zakresu
Formula odczytuje/ustawia formułę dla zakresu
Select zaznacza zakres
Font formatuje czcionkę
Cells(x,y) odwołuje się do komórki (x,y) z podanego zakresu
Offset(x,y) adres jako przesunięcie w pionie o x i w poziomie o y
Sub test7()
Worksheets(1).Activate
Range("A1:C5").Value = "*"
Range("A1:C5").Cells(2, 2) = "@"
Range("B3").Offset(-2, 2) = "$"
End Sub
Jerzy Duda, WZ AGH, 2009-2010
Projektowanie obiektowe
Projektowanie zorientowane obiektowo (OOP) -
Projektowanie zorientowane obiektowo (OOP)
podział aplikacji na kilka autonomicznych
komponentów, które pracują razem
Mimo, \e istnieje wiele metodologii takiego
podziału projektowanie obiektowe to bardziej
sztuka ni\ nauka*
Proces projektowania zorientowanego obiektowo
składa się z trzech podstawowych zadań:
1. podział dziedziny problemu na typy obiektów (klasy)
2. modelowanie związków pomiędzy tymi typami
3. projektowanie pól oraz metod dostępu w typach
*yródło: Patrick Niemeyer, Jonathan Knudsen: Java. Wprowadzenie
Jerzy Duda, WZ AGH, 2009-2010
16
Obiekt
Definicja powszechna:
Obiekt w języku obiektowym reprezentuje obiekt w świecie
rzeczywistym; jest strukturą posiadającą to\samość, stan
(pola) i zachowanie (metody)
Definicja ogólniejsza:
Obiekt jest elementem modelu pojęciowego obdarzonym
odpowiedzialnością za pewien obszar świata
rzeczywistego; sposób realizacji tej odpowiedzialności
zale\y od samego obiektu
*yródło: http://wazniak.mimuw.edu.pl/
Jerzy Duda, WZ AGH, 2009-2010
Pojęcia OOP
Pojęcie Opis Przykład
Obiekt Jakaś rzecz Worksheet
Metoda Czynność, którą Worksheet.Add
rzecz mo\e wykonać
Właściwość Jakaś cecha rzeczy Worksheet.Name
(Property)
Jerzy Duda, WZ AGH, 2009-2010
17
Odpowiedzialność
Abstrakcja
Polimorfizm
Hermetyzacja
Odpowiedzialność
Dziedziczenie
Elastyczność
Modularyzacja
Powtórne u\ycie
*yródło: http://wazniak.mimuw.edu.pl/
Jerzy Duda, WZ AGH, 2009-2010
Metodyka CRC
Class Responsibilty Collaboration) 1/2
Zaproponowana przez jednego z propagatorów tzw.
zwinnych metodyk Warda Cunninghama
Karty CRC są kartkami papieru podzielonymi na trzy części,
opisującymi następujące własności klasy:
nazwę klasy (ang. Class), intuicyjnie opisującą jej
odpowiedzialność,
odpowiedzialność (ang. Responsibility), zawierającą dłu\szy
opis zadań, jakie będą powierzone klasie,
współdziałanie (ang. Collaboration), przedstawiające
interakcje obiektu z innymi klasami.
*yródło: http://wazniak.mimuw.edu.pl/
Jerzy Duda, WZ AGH, 2009-2010
18
Metodyka CRC
Class Responsibilty Collaboration) 2/2
Szczególnie przydatna na etapie definiowania
odpowiedzialności poszczególnych klas i określania
sposobu współpracy
Pomija całkowicie wewnętrzną strukturę klas, skupiając się
wyłącznie na ich zachowaniu i odpowiedzialności
Zło\oność procesu projektowania schematu klas jest
ograniczona do minimum
*yródło: http://wazniak.mimuw.edu.pl/
Jerzy Duda, WZ AGH, 2009-2010
Przykład: Średnia ocen dla grupy studentów
Podział na klasy i związki między nimi
Grupa
Cel:
-studenci[] : Student
1..*
Stworzenie aplikacji, która -pracownik : Pracownik
+numer : int
+DodajOsobe()
zapamiętuje podstawowe
+PrzypiszPrac()
+LiczSrednia() : float
dane dotyczące grupy
Osoba
studentów, prowadzącego
1 -nazwisko : string
-imie : string
oraz liczy średnią ocen dla -data_ur : Date
+UstawDateUr()
tej grupy +PobierzDateUr() : Date
+UstawNazwisko()
+PodajNazwisko() : string
+UstawImie()
+PodajImie() : string
1..*
Student Pracownik
+tytuł : string
-ocena : float
-data_oceny : Date
+podajTytul() : string
+PodajOcene() : float +ustawTytul()
1
+PodajDate() : Date +ustawOcene()
+ustawDateOceny()
Jerzy Duda, WZ AGH, 2009-2010
19
Tworzenie klasy w VBA
Menu Insert Class Module
Ustawiamy Name
Nazwa klasy
Deklarujemy zmienne
prywatne (ukryte)
Jest to mechanizm
hermetyzacji
zmiennych
Jerzy Duda, WZ AGH, 2009-2010
Osoba
-nazwisko : string
-imie : string
-data_ur : Date
+UstawDateUr()
Hermetyzacja
+PobierzDateUr() : Date
+UstawNazwisko()
+PodajNazwisko() : string
+UstawImie()
Definicja powszechna +PodajImie() : string
Ukrywanie danych przed niepo\ądanym dostępem
Wystarczy zadeklarować pola jako niepubliczne oraz
stworzyć metody dostępu do nich, aby osiągnąć właściwy
poziom ukrycia implementacji
Private pNazwisko As String
Private pImie As String
Private pData As Date
Public Property Get Nazwisko() As String
Nazwisko = pNazwisko
End Property
Public Property Let Nazwisko(Value As String)
pNazwisko = Value
End Property
...
Jerzy Duda, WZ AGH, 2009-2010
*yródło: http://wazniak.mimuw.edu.pl/
20
Właściwości w VBA (1)
Dla zhermetyzowanych zmiennych nale\y utworzyć metody
dostępowe (właściwości)
Property Get dla zwrotu wartości ukrytej zmiennej skalarnej lub
Property Get
obiektowej
Property Let dla ustawienia wartości ukrytej zmiennej skalarnej
Property Let
Property Set dla ustawienia wartości ukrytej zmiennej obiektowej
Property Set
Private string nazwisko
Public Property Get Nazwisko() As String
Get
Nazwisko = nazwisko
End Property
Public Property Let Nazwisko(Value As String)
Let
nazwisko = Value
Private Pracownik prowadzący
End Property
Public Property Get Prowadzący()
Get
Set Prowadzący = pracownik
End Property
Public Property Set Prowadzący(Value As Pracownik)
Set
set prowadzący = Value
Jerzy Duda, WZ AGH, 2009-2010
End Property
Właściwości w VBA (2)
Je\eli zmienna ma być tylko do odczytu na zewnątrz klasy,
tworzymy tylko właściwość Get
Private string nazwisko
Public Property Get Nazwisko() As String
Get
Nazwisko = nazwisko
End Property
Dim os As New Osoba
Osoba.Nazwisko = "Kowalski" 'Błąd
Je\eli chcemy tylko dać mo\liwość tylko jednorazowego
przypisania obiektu do zmiennej stosujemy następujący kod
Private Pracownik prowadzący
Public Property Set Prowadzący(Value As Pracownik)
If prowadzący Is Nothing Then
Set prowadzący = Value
End If
End Property
Jerzy Duda, WZ AGH, 2009-2010
21
U\ycie właściwości klasy w VBA
1. Deklaracja obiektu (Dim obiekt As klasa)
2. Utworzenie obiektu (Set obiekt = New klasa)
3. Ustawienie właściwości (obiekt.właciwość = wartość)
Dim os As Osoba
Set os = New Osoba
os.Imię = "Anna"
os.Nazwisko = "Nowak"
os.Data = "20-02-1990"
Obiekty mo\na równie\ tworzyć podczas deklaracji
Dim os As New Osoba
New
os.Imię = "Anna"
...
Jerzy Duda, WZ AGH, 2009-2010
Metody w VBA
Dla klas mo\na tworzyć zwykłe metody operujące na
zmiennych klasy
...
Public Sub WyświetlDane()
MsgBox "Osoba: " & Imię & " " & Nazwisko
End Sub
Dim os As New Osoba
New
os.Imię = "Anna"
os.Nazwisko = "Nowak"
os.WyświetlDane
Jerzy Duda, WZ AGH, 2009-2010
22
Konstruktory i destruktory w VBA
Klasa mo\e posiadać te\ metodę inicjalizującą konstruktor
Metoda ta jest wywoływana w momencie tworzenia obiektu
(operatorem New)
Private Sub Class_Initialize()
pOcena = 2.0
End Sub
Analogicznie do konstruktorów klasa mo\e posiadać te\
destruktor
Destruktory uruchamiane są w momencie usuwania obiektu z
pamięci
Destruktory słu\ą zwalnianiu pamięci, zamykaniu plików, itp/
Private Sub Class_Terminate()
' jakiś kod '
End Sub
Jerzy Duda, WZ AGH, 2009-2010
Dziedziczenie
Mechanizm wyra\ania podobieństwa
między klasami
Upraszcza definicje klas podobnych do ju\
zdefiniowanych
Opisuje generalizację i specjalizację,
czyniąc wspólne atrybuty i usługi jawnymi
wewnątrz hierarchii klas
W VBA nie ma mechanizmu dziedziczenia
klas; zamiast niego mo\na stosować
interfejsy
*yródło: Coad, Yourdon: Analiza obiektowa, ReadMe 1994
Jerzy Duda, WZ AGH, 2009-2010
23
Abstrakcja w OOP
Zasada ignorowania tych aspektów przedmiotu, które
nie są istotne z punktu widzenia bie\ącego celu, by móc
lepiej skoncentrować się na właściwych [Słownik
Oxford]
Zdolność do ignorowania niektórych decyzji
projektowych lub mo\liwości odło\enia ich w czasie
System zbudowany z abstrakcyjnych komponentów
mo\e być łatwo rozszerzany, poniewa\ zmiany nie są
widoczne poza tym komponentem
*yródło: http://wazniak.mimuw.edu.pl/
Jerzy Duda, WZ AGH, 2009-2010
Abstrakcja w VBA
W VBA nie mo\na tworzyć klas abstrakcyjnych, nie ma te\
mechanizmu dziedziczenia klas
Zamiast tego mo\na wykorzystać interfejsy
Interfejs to zbiór właściwości i metod (a tak\e zdarzeń), które
Interfejs
określają cechy i zachowanie obiektu (odpowiedzialność)
Mo\na tworzyć
interfejsy abstrakcyjne
Public Property Get Imię() As String
poprzez nie-
End Property
Public Property Let Imię(Value As String)
implementowanie
End Property
kodu poszczególnych
Public Property Get Nazwisko() As String
własności i metod End Property
Public Property Let Nazwisko(Value As String)
End Property
Public Property Get Data() As Date
End Property
Public Property Let Data(Value As Date)
End Property
*yródło: http://wazniak.mimuw.edu.pl/
Jerzy Duda, WZ AGH, 2009-2010
24
Interfejs i dziedziczenie w VBA
Implementacja interfejsu (dziedziczenie jego
odpowiedzialności, kontraktu) odbywa się poprzez
wstawienie deklaracji Implements na początku modułu klasy
Implements AOsoba
Implements
Private pImię As String
Private pNazwisko As String
Private pData As Date
Private pOcena As Double
Public Property Get AOsoba_Imię() As String
AOsoba_Imię = pImię
End Property
Public Property Let AOsoba_Imię(Value As String)
pImię = Value
End Property
Public Property Get AOsoba_Nazwisko() As String
AOsoba_Nazwisko = pNazwisko
End Property
...
Jerzy Duda, WZ AGH, 2009-2010
Polimorfizm
Poly (gr. wiele) morph (gr. postać)
Mechanizm umo\liwiający współistnienie ró\nych
metod, które mogą zostać wykonane w odpowiedzi na
komunikat odebrany przez obiekt
Wybór metody dokonywany jest dynamicznie, na
podstawie typu obiektu odbiorcy
*yródło: http://wazniak.mimuw.edu.pl/
Jerzy Duda, WZ AGH, 2009-2010
25
Polimorfizm w VBA przykład
'Klasa Koło
Implements Figura
Sub Figura_Rysuj()
'Interfejs Figura
MsgBox "Rysuję koło"
Public Sub Rysuj()
End Sub
End Sub
'Klasa Kwadrat
Implements Figura
Sub Figura_Rysuj()
MsgBox "Rysuję kwadrat"
End Sub
Sub testF()
Dim ko As New koło
Sub Maluj(f As Figura)
Dim kw As New Kwadrat
f.Rysuj
Call Maluj(ko)
End Sub
Call Maluj(kw)
End Sub
Jerzy Duda, WZ AGH, 2009-2010
Kolekcje obiektów w VBA
Kolekcja obiektów Osoba
Sub testGrupy() ...
Dim grupa As New Collection suma = 0
Dim s1 As New Osoba For Each s In grupa
s1.Imię = "Jan" suma = suma + s.Ocena
s1.Nazwisko = "Kowalski" Next
s1.Ocena = 4 MsgBox "Średnia ocen " &
suma / grupa.Count
grupa.Add s1
End Sub
Dim s2 As New Osoba
s2.Imię = "Anna"
s2.Nazwisko = "Nowak"
s2.Ocena = 5
grupa.Add s2
...
Jerzy Duda, WZ AGH, 2009-2010
26
Serializacja obiektów
Serializacja w programowaniu komputerów proces
przekształcania obiektów do postaci szeregowej (czyli w
strumień bajtów) z zachowaniem aktualnego stanu
obiektu
Serializowany obiekt mo\e zostać utrwalony w pliku
dyskowym, przesłany do innego procesu lub innego
komputera poprzez sieć
Procesem odwrotnym do serializacji jest deserializacja.
Proces ten polega na odczytaniu wcześniej zapisanego
strumienia danych i odtworzeniu na tej podstawie
obiektu klasy wraz z jego stanem bezpośrednio sprzed
serializacji
*yródło: http://wikipedia.org
Jerzy Duda, WZ AGH, 2009-2010
Serializacja obiektów w VBA (1)
Sub Serializuj_Osoba(os As Osoba)
Serializacja
Open "Dane" For Output As #1
Write #1, os.Imię
Write #1, os.Nazwisko
Write #1, os.Data
Close #1
End Sub
Function Deserializuj_Osoba() As Osoba
Deserializacja
Open "Dane" For Input As #1
Input #1, Imię
Input #1, Nazwisko
Input #1, Data
Close #1
Dim os As New Osoba
os.Imię = Imię
os.Nazwisko = Nazwisko
os.Data = Data
*yródło: http://wazniak.mimuw.edu.pl/ Set Deserializuj_Osoba = os
End Function
Jerzy Duda, WZ AGH, 2009-2010
27
Serializacja obiektów w VBA (2)
Kod testujący
Sub Test_Serializuj()
Dim os1 As New Osoba
os1.Imię = "Anna"
os1.Nazwisko = "Nowak"
Call Serializuj_Osoba(os1)
Dim os2 As Osoba
Set os2 = Deserializuj_Osoba()
MsgBox os2.Imię
End Sub
Plik z danymi Dane
"Anna"
"Nowak"
#1899-12-30#
Jerzy Duda, WZ AGH, 2009-2010
28
Wyszukiwarka
Podobne podstrony:
Algorytm programu PARTY pascal
Wprowadzenie do algorytmiki i programowania
elementy algorytmu programu kolektorek
2009 12 Metaprogramowanie algorytmy wykonywane w czasie kompilacji [Programowanie C C ]
JP SS 2 algorytmy i podstawy programowania
Algorytmy i struktury danych Prosty program Simulated Annealing
Optymalizacja Cw 3 Zadanie programowania nieliniowego bez ograniczeń algorytmy optymalizacji loka
Algorytmy i struktury danych Programy do wykladu 3
Metody układania algorytmów rekurencja, metoda dziel i zwyciężaj, programowanie dynamiczne, metoda
zestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 6
Międzynarodowy Program Badań nad Zachowaniami Samobójczymi
CSharp Introduction to C# Programming for the Microsoft NET Platform (Prerelease)
Instrukcja Programowania Zelio Logic 2 wersja polska
więcej podobnych podstron