Programowanie obiektowe w MATLABie
W dzisiejszym świecie zastosowanie technik programowania obiektowego widoczne jest wszędzie. Wystarczy, że człowiek lodówkę otworzy i już na niego oo wyskakuje, ale co się dziwić? Skoro Arduino można programować dziś obiektowo, to tostery też można. MATLAB, jako współczesny język programowania, również jest zorientowany obiektowo. Nie było tak co prawda zawsze, możliwość programowania obiektowego wprowadzono kilka lat temu. Zrobiono to jednak bez większego rozgłosu i spora część użytkowników może sobie nie zdawać sprawy z tego, że w MATLABie można programować obiektowo. W tym braku świadomości nie ma nic złego, MATLAB to środowisko obliczeniowe wykorzystywane na wielu płaszczyznach i do wielu celów, nie każdy użytkownik programu jest programistą i nie każdemu zaawansowane techniki programistyczne są do szczęścia potrzebne. Warto jednak zapoznać się z podstawami z tego prostego względu, że z wersji na wersję w MATLABie powiększa się liczba gotowych klas przygotowanych do wykorzystania przez użytkowników.
Obiekty, właściwości, metody
Mimo że zapoznanie się z podstawami pracy z obiektami wymaga włożenia odrobiny wysiłku, owocuje uproszczeniem życia. Dla przykładu, przy pomocy MATLABa zarejestruję sygnał dźwiękowy. W tym celu w pierwszej kolejności stworzę obiekt klasy audiorecorder
.
fs = 22050; % częstotliwość próbkowania b = 16; % rozdzielczość n = 1; % liczba kanałów recorder = audiorecorder(fs, b, n);
Co ważne, proces akwizycji się jeszcze nie rozpoczął. Jak na razie został stworzony obiekt recorder, pośrednik, którym posłużę się w celu zarejestrowania dźwięku już za chwilę. Obiekt recorder można poddać bliższej analizie.
To co widzimy po lewej stronie, to właściwości. Można je interpretować jako mocno związane z obiektem zmienne, zamknięte dla naszej wygody w jednym worku. Podgląd na właściwości możliwy jest również bezpośrednio z wiersza poleceń, w celu wyświetlenia listy należy skorzystać z polecenia properties
.
poperites(recorder)
Oprócz właściwości każdy obiekt ma zestaw powiązanych ze sobą funkcji, które nazywa się metodami. Ich listę można uzyskać wykorzystując komendę methods.
methods(recorder)
Metoda jest związana z obiektem w ten sposób, że ma dostęp do wszystkich jego właściwości. W przypadku najbardziej interesującej nas w tym momencie metody recordblocking
, służącej do rejestracji dźwięku, nie musimy określać, jaka ma być częstotliwość, rozdzielczość i ilość kanałów. Te dane zostały zapisane w obiekcie w momencie jego tworzenia. To co należy podać wywołując metodę to czas akwizycji i oczywiście obiekt, dla którego wywołujemy metodę (na pierwszym miejscu).
recordblocking(record, 2)
Metoda recordblocking
nie zwraca do MATLABa żadnych widocznych wyników, co przy pierwszym użyciu może być trochę konfundujące. Dane powiązane są z obiektem recorder i tam należy ich szukać. Jeśli chcemy je wyciągnąć na zewnątrz, należy posłużyć się metodą getaudiodata
. Od razu przygotuję sobie wektor czasu, który przyda mi się przy tworzeniu wykresu. W tym celu skorzystam z dostępnych właściwości obiektu recorder. Właściwości możemy odczytywać i zmieniać za pomocą pary metod get
/ set
lub łatwiej, stosując zapis obiekt.właściwość
.
N = recorder.TotalSamples; % zarejestrowana liczba próbek dt = 1 / recorder.SampleRate; % krok na osi czasu t = 0:dt:(N-1)*dt; data = getaudiodata(recorder);
Dla osób nie oswojonych z takim trybem pracy wszystko może się wydawać przesadnie skomplikowane. To jednak mylne wrażenie. Dzięki stosowaniu obiektów wszystko jest o wiele bardziej uporządkowane a nasze algorytmy są mniej podatne na błędy. Zresztą, nawet nie mając takiej świadomości, przy praktycznie każdej sesji z programem MATLAB tworzymy jakieś obiekty.
p = plot(t, data); xlabel('czas [s]'); grid on;
W przestrzeni roboczej pojawił się obiekt p, związany z wykresem. Jeśli przyjdzie nam ochota na zmianę koloru linii, to znając obiektową stronę MATLABa możemy to zrobić w banalnie prosty sposób.
p.color = 'green';
Własne klasy
Możemy również definiować własne klasy, z których można korzystać w analogiczny sposób jak z tych wbudowanych. W MATLABie mamy prostą zasadę: w jednym m-pliku możemy zamknąć jedną klasę. Szablon klasy dostępny jest w zakładce HOME -> New -> Class
Zainteresowanych tematem odsyłam do wprowadzającego webinarium (w języku angielskim).
http://www.mathworks.com/videos/object-oriented-programming-in-matlab-81606.html