Algorytmy i programowanie


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
Kschodzimy
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