Wprowadzenie do programowania obiektowego

Podobne dokumenty
Matlab - tworzenie graficznego interfejsu użytkownika GUI - Graphic User Interface

MATLAB Prowadzący: dr hab. inż. Marek Jaszczur Poziom: początkujący

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Ćwiczenie 7. Matlab formularze, komponenty

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Podstawy Programowania Obiektowego

Technologie i usługi internetowe cz. 2

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Ćwiczenie 6. Matlab formularze, komponenty

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Wykład 4: Klasy i Metody

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Rozdział 4 KLASY, OBIEKTY, METODY

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs WWW. Paweł Rajba.

Kier. MTR Programowanie w MATLABie Laboratorium

Informatyka II. Laboratorium Aplikacja okienkowa

Programowanie obiektowe - 1.

TEMAT : KLASY DZIEDZICZENIE

Dokumentacja do API Javy.

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Ćwiczenia nr 4. Arkusz kalkulacyjny i programy do obliczeń statystycznych

Dziedziczenie. Tomasz Borzyszkowski

.NET Klasy, obiekty. ciąg dalszy

Wykład 8: klasy cz. 4

Polimorfizm. dr Jarosław Skaruz

Polimorfizm, metody wirtualne i klasy abstrakcyjne

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie Obiektowe GUI

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Podstawy JavaScript ćwiczenia

Język programowania. Andrzej Bobyk

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Dodawanie grafiki i obiektów

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

MS Word Długi dokument. Praca z długim dokumentem. Kinga Sorkowska

Programowanie obiektowe

Pisząc okienkowy program w Matlabie wykorzystujemy gotowe obiekty graficzne, lub możemy tworzyć własne obiekty dziedzicząc już zdefiniowane.

Programowanie obiektowe. Wykład 4

Właściwości i metody obiektu Comment Właściwości

Programowanie obiektowe

Programowanie 2. Język C++. Wykład 3.

Oracle PL/SQL. Paweł Rajba.

Przykład 1: Funkcja jest obiektem, przypisanie funkcji o nazwie function() do zmiennej o nazwie funkcja1

Dodanie nowej formy do projektu polega na:

37. Podstawy techniki bloków

Materiały do zajęć VII

Języki i metody programowania Java Lab2 podejście obiektowe

Tablice, DataGridView

Materiały do laboratorium MS ACCESS BASIC

PARADYGMATY PROGRAMOWANIA Wykład 4

Sposób tworzenia tabeli przestawnej pokażę na przykładzie listy krajów z podstawowymi informacjami o nich.

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Podstawy Języka Java

Zadanie 1. Stosowanie stylów

Definiowanie własnych klas

Programowanie obiektowe

Dziedziczenie. Zadanie 1

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Wykład 5: Klasy cz. 3

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Pakiety matematyczne. Matematyka Stosowana. dr inż. Krzysztof Burnecki

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Wstęp do programowania obiektowego. Wykład 2

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Programowanie w języku Python. Grażyna Koba

Aplikacje geodezyjne

Formatowanie tekstu za pomocą zdefiniowanych stylów. Włączanie okna stylów. 1. zaznaczyć tekst, który chcemy formatować

PODSTAWY TWORZENIA WYKRESÓW ORAZ HANDLE GRAPHICS

Mechanizm dziedziczenia

Podstawy Programowania 2

Paweł Kurzawa, Delfina Kongo

Aplikacje w środowisku Java

Dziedziczenie jednobazowe, poliformizm

Wprowadzenie do systemu Delphi

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Okno zarządzania warstwami w dokumencie znajduje się na wstążce Narzędzia główne

BAZY DANYCH Panel sterujący

Warsztaty dla nauczycieli

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Kolory elementów. Kolory elementów

Access - Aplikacja. Tworzenie bazy danych w postaci aplikacji

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

za pomocą: definiujemy:

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Dziedziczenie. dr Jarosław Skaruz

Programowanie w środowisku graficznym GUI

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Programowanie strukturalne i obiektowe. Funkcje

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH

Tworzenie szablonów użytkownika

Kalkulator. Programowanie komputerów. Kalkulator możliwe udoskonalenia. Kalkulator. Kalkulator. Kalkulator możliwe udoskonalenia

Transkrypt:

Wprowadzenie do programowania obiektowego OOP - Object-Oriented Programming Z. Rudnicki Tradycyjne programowanie strukturalne Zalety: Sekwencyjne wykonywanie poleceń ułatwia tworzenie i sprawdzanie algorytmów Wady: Dane są dostępne w całym programie co zwiększa ryzyko ich przypadkowego uszkodzenia Obszerne programy mogą być mało przejrzyste Brak dostosowania do trybu okienkowego i graficznych interfejsów użytkownika 2 1

OOP - Object-Oriented Programming Programowanie Zorientowane Obiektowo Bazuje na klasach obiektów (class), stanowiących rozszerzenie koncepcji typów danych - a w szczególności typów charakteryzowanych n-tkami cech (i w Matlabie zwanych strukturami) - o funkcje (methods) i zdarzenia (events) do obsługi tych danych. Pozwala odwzorować zarówno graficzne (ekranowe) obiekty dialogowe jak dowolne obiekty ze świata realnego 3 Programowanie Zorientowane Obiektowo c.d. Pozwala tworzyć klasy obiektów o zmiennych cechach (properties) do wielokrotnego użytku (reusable), zabezpieczone przed obcymi działaniami czyli hermetyzowane (encapsulated), dzięki posiadaniu własnych operatorów i funkcji (methods) Umożliwia dziedziczenie (inheritance) cech z klas nadrzędnych Operatory i funkcje mogą wykazywać polimorfizm (wielopostaciowość) - zmieniając działanie odpowiednio do klasy (typu) obiektów na których działają. Taka zmiana działania operatora nazywana jest z angielska overloading czyli przedefiniowanie albo przeładowanie operatora ale najczęściej tłumaczona jest (mylnie) jako przeciążanie operatorów. Przykład: dodawanie tekstów to ich sklejanie a nie suma jak dla liczb 4 2

W Matlabie zamiast typów danych są klasy W tradycyjnych językach programowania każda stała i zmienna musi mieć określony typ. W Matlabie i językach obiektowo zorientowanych zamiast typów zmiennych występują klasy obiektów. Powstające zmienne są więc obiektami określonych klas. Na przykład zdefiniujmy zmienne przez nadanie im wartości: >> p='ala'; x=[5,2;3,4]; y=4.1; >> whos % - wyświetli utworzone zmienne: Name Size Bytes Class p 1x3 6 char x 2x2 32 double y 1x1 8 double 5 Cechy i metody klasy obiektów Każda klasa ma przypisane CECHY properties oraz METODY methods (czyli podprogramy funkcyjne). Na przykład chcemy wyświetlić metody dla klasy o nazwie double: >> methods('double') Methods for class double: abs exist nonzeros accumarray exp norm acos fft not acosh fftn nzmax......... 6 3

Trzy poziomy korzystania z obiektowości w Matlabie 1) nieświadome przez używanie zmiennych, funkcji i wykresów - jak dotychczas 2) korzystanie z graficznych dialogowych obiektów przy pomocy kreatora Guide 3) samodzielne definiowanie dowolnych klas i obiektów 7 Gotowe klasy w Matlabie Przy tworzeniu wykresów i programów z interfejsem graficznym - korzystamy ze zdefiniowanych już w Matlabie klas, tworząc jedynie obiekty czyli instancje tych klas, jak: układy współrzędnych, linie, przyciski, suwaki i t.p. Modyfikujemy ich cechy i przypisujemy ich zdarzeniom funkcje. 8 4

Korzystanie z wbudowanych klas i obiektów graficznych za pomocą kreatora GUIDE 9 Przykład: utworzyć program do obliczania pierwiastka kwadratowego z wpisanej liczby 10 5

Kreator GUIDE oraz Inspector cech W oknie komend wpisujemy: guide - pojawi się pusta formatka na którą można wstawiać obiekty dialogowe z palety klas Wybrany kliknięciem obiekt pokaże swoje cechy i metody w oknie INSPECTOR Cechy te (np.: Color) można zmieniać w INSPECTORze Każdy element ma identyfikator istniejący jako wartość cechy TAG 11 Tworzenie obiektów za pomocą palety klas Do naszego prostego programu wykorzystamy obiekty następujących klas: STATIC TEXT - ustalony tekst nie podlegający edycji EDIT TEXT - okienko do wpisywania, w naszym przypadku liczb dla których ma obliczyć pierwiastek PUSH BUTTON - przycisk - u nas z napisem OBLICZ - inicjujący obliczenia 12 6

Tworzenie GUI programu PIERWIASTEK w kreatorze GUIDE 13 Określanie cech obiektów w okienku INSPECTOR Po wstawieniu obiektów można zmieniać ich położenie i rozmiary przy pomocy myszki natomiast inne cechy zmienia się po wybraniu obiektu w okienku INSPECTOR. W naszym przypadku istotne będą cechy: String - tekst wyświetlany FontSize - rozmiar czcionki FontWeight - wytłuszczenie czcionki BackGroundColor - kolor tła Callback - wywołanie funkcji realizowane przyciskiem 14 7

Zmienione cechy obiektów Klasa TAG Cecha Wartość cechy String 'Obliczanie pierwiastka liczby' Static Text text1 FontSize 11 FontWeight bold BackGroundColor [1 1 0] String 'Liczba =' Static Text text2 FontSize 11 FontWeight bold BackGroundColor [1 1 0] String 'Pierwiastek =' Static Text text3 FontSize 11 FontWeight bold BackGroundColor [1 1 0] Static Text String '' text4 FontSize 11 FontWeight bold Edit Text String '' edit1 FontSize 11 FontWeight bold String 'OBLICZ' Push Button pushbutton1 FontSize 11 FontWeight bold Callback - ustawiona automatycznie 15 Funkcja pushbutton1_callback wywoływana kliknięciem przycisku OBLICZ Przycisk pushbutton1 ma wywołać funkcję która: odczyta tekst wpisany do pola edit1 i przekonwertuje go na liczbę, obliczy pierwiastek z tej liczby, wyświetli wynik w polu text4. Funkcja ta może mieć następującą postać: %------------------------------------------------------------------------------------------------------ function pushbutton1_callback(hobject, eventdata, handles) % hobject - handle to pushbutton1 (see GCBO) % eventdata - reserved - to future version of MATLAB % handles - structure with handles and user data x = str2double(get(handles.edit1,'string')); y = sqrt(x); set(handles.text4,'string',num2str(y)); 16 8

Samodzielne definiowanie nowych klas 17 Definiowanie nowej klasy (klasy użytkownika) Zdefiniowanie nowej klasy wymaga utworzenia nowego folderu dla tej klasy o nazwie: @nazwa_klasy i umieszczeniu w nim m-plików obsługujących tą klasę. Przykład: przed utworzeniem klasy o nazwie Wektor2D tworzymy folder o nazwie : @Wektor2D. Folder ten będzie przeszukiwany przez MATLABa w pierwszej kolejności. 18 9

Definiowanie nowej klasy Zdefiniujmy nową klasę obiektów o nazwie: Wektor2D Tworzymy blok classdef i zapisujemy go do pliku o nazwie takiej jak nazwa klasy, a więc w naszym przypadku Wektor2D.m do foldera @Wektor2D Cechami obiektu klasy Wektor2D - wymienionymi w bloku properties - niech będą współrzędne jego początku oraz końca: Obiekty definiowanej klasy mogą mieć też określone metody czyli methods oraz zdarzenia czyli events 19 Tworzenie obiektu danej klasy Na podstawie definicji klasy można tworzyć wiele obiektów należących do tej klasy i nazywanych czasem instancjami klasy. Zdefiniujmy więc wektor A przez przypisanie mu nazwy klasy: >> A = Wektor2D A = Wektor2D Properties: Xp: [] Yp: [] Xk: [] Yk: [] Methods Odpowiedź Matlaba zaznaczono powyżej kolorem niebieskim. Jak widać cechy nie mają przypisanych wartości. 20 10

Przypisanie wartości CECH - notacja kropkowa Można przypisywać wartości cechom korzystając z notacji kropkowej: nazwa_obiektu. nazwa_cechy = wartość_cechy nazwę cechy poprzedza nazwa obiektu (wektora A) oddzielona kropką: >> A.Xp=0; A.Yp=0; A.Xk=1; A.Yk=1; Teraz sprawdźmy jakie składowe ma wektor A wpisując jego nazwę: >> A A = Wektor2D Properties: Xp: 0 Yp: 0 Xk: 1 Yk: 1 A 1,1 Methods 0,0 21 Definiowanie KONSTRUKTORA klasy Definicja klasy może zawierać definicję specjalnej funkcji (metody) zwanej konstruktorem, a posiadającej nazwę taką samą jak nazwa klasy. Konstruktor pozwala tworzyć obiekty i nadawać wartości cechom obiektu. Oto konstruktor dla klasy Wektor2D umieszczony w bloku methods function obj = Wektor2D(xp, yp, xk, yk) if nargin <4 'Wektor2D([], [], [], [])' else obj.xp=xp; obj.yp=yp; obj.xk=xk; obj.yk=yk; end %if end %-----end_fun 22 11

Wykorzystanie KONSTRUKTORA do tworzenia obiektu Po dodaniu konstruktora do definicji klasy, można tworzyć obiekt o określonych cechach przy pomocy jednego polecenia, na przykład: >> B=Wektor2D(1,1,2,0) B = Wektor2D Properties: Xp: 1 Yp: 1 Xk: 2 Yk: 0 Methods 23 Metody Metody są m-funkcjami, które pobierają obiekt jako jeden z argumentów wejściowych. Obiekt (instancja klasy) może zostać utworzony przez uruchomienie specjalnej metody zwanej konstruktorem i przekazanie do niej odpowiednich argumentów wejściowych. W MATLAB-ie konstruktory mają taką samą nazwę jak klasa. Składnia wywołania metody w przypadku ogólnym ma postać: [out1, out2,...] = nazwa_metody(obiekt, arg1, arg2,...); Niektóre metody, nazywane prywatnymi, mogą być wywoływane wyłącznie przez inne metody swojej klasy - nie można ich wywołać z wiersza poleceń ani z metod innych klas. Metody prywatne są umieszczane w folderze @nazwa_metody\private 24 12

Definiowanie METOD klasy Zdefiniujmy na razie dwie metody: classdef Wektor2D end a) wyznaczanie składowych wektora Dx, Dy, b) wyznaczanie długości wektora. properties Xp, Yp, Xk, Yk end methods function [dx, dy] = skladowe(obj) dx=obj.xk-obj.xp; dy=obj.yk-obj.yp end function Le = dlugosc(obj) [Dx, Dy]= skladowe(obj) Le = sqrt(dx^2+dy^2); end end 25 Wywoływanie metod Metoda dlugosc dla wektora A daje poprawny wynik bo jak wiemy przekątna kwadratu o boku 1 to pierwiastek z 2: >> dlugosc (A) ans = 1.4142 Metoda skladowe nie wyświetli poprawnego wyniku jeśli nie przypomnimy sobie, że trzeba jej wyniki wstawić do dwuelementowego wektora : skladowe(a) ans = 1 >> [Dx, Dy]= skladowe(a) Dx = 1 Dy = 1 26 13

Wywoływanie metod - notacja kropkowa Metody można również wywoływać stosując notację kropkową: >> A.dlugosc ans = 1.4142 >> [p q]=a.skladowe p = 1 q = 1 27 Przedefiniowywanie funkcji i operatorów Każda klasa może definiować, w specyficzny dla swych obiektów sposób, funkcje i operatory istniejące już - pod takimi samymi nazwami - w innych klasach. W naszym przykładzie zdefiniujemy dla klasy Wektor2D dodawanie wektorów, przy pomocy funkcji "plus", mimo, że funkcja "plus" jest już zdefiniowana w Matlabie dla liczb rzeczywistych oraz macierzy i jest także wywoływana przez operator "+". function s = plus(o1,o2) s=wektor2d; s.xp=o1.xp; s.yp=o1.yp; [Dx, Dy]= skladowe(o2); s.xk=o1.xk+dx; s.yk=o1.yk+dy; end %-----fun 28 14

Przedefiniowywanie funkcji i operatorów c.d. Takie przedefiniowywanie istniejących funkcji lub operatorów nazywa się po angielsku "overloading" co jest mylnie tłumaczone na "przeciążanie" a nieco bardziej poprawnie na "przeładowywanie". Sprawdzamy czy metoda dobrze doda nasze wektory: >> C=A+B C = Wektor2D Properties: Xp: 0 Yp: 0 Xk: 2 Yk: 0 Methods A 1,1 B 0,0 C 2,0 29 Dziedziczenie (Inheritance) Dziedziczenie to związek pomiędzy klasami obiektów określający przekazywanie cech (definicji atrybutów, metod, itd.) z klasy bazowej (nadklasy) do jej klas pochodnych (podklas). Np. obiekt klasy Pracownik dziedziczy wszystkie własności (definicje atrybutów, metody) określone w ramach klasy Osoba. Obiekty mogą dziedziczyć od innych obiektów właściwości i sposoby działania. Kiedy jeden obiekt (pochodny) dziedziczy od innego (bazowego), do obiektu pochodnego włączone są wszystkie pola struktury obiektu bazowego i może on używać wszystkich metod obiektu bazowego. Metody obiektu bazowego mają dostęp jedynie do pól, które obiekt pochodny dziedziczy od bazowego. Dzięki dziedziczeniu obiekty klas pochodnych zachowują się dokładnie jak obiekt bazowy, z dodatkowymi rozszerzeniami. 30 15

Hierarchia klas Matlaba Klasy nowo tworzone przez użytkownika wywodzą się z klasy struct czyli struktury stanowiącej n-tkę pól analogicznie jak wiersz w tabeli bazy danych. Pola struktury to cechy obiektu 31 Cechy obiektów danej klasy Każdy obiekt danej klasy może być charakteryzowany n-tką cech podobnie jak w tabeli bazy danych gdzie każdemu obiektowi odpowiada wiersz z zapisem jego cech (zwany rekordem, a w Matlabie strukturą). 32 16