Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Programowanie obiektowe
Podstawy Programowania dla geoinformatyków Wykład 4 Rafał Witkowski, 2015
2
Paradygmat programowania obiektowego
paradygmat programowania, w którym programy definiuje się za pomocą obiektów — elementów łączących stan (czyli zmienne, nazywane najczęściej polami lub atrybutami) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań.
3
Paradygmat programowania obiektowego
Największym atutem programowania, projektowania oraz analizy obiektowej jest zgodność takiego podejścia z rzeczywistością – mózg ludzki jest w naturalny sposób najlepiej przystosowany do takiego podejścia przy przetwarzaniu informacji. Programowanie zorientowane obiektowo polega na zbudowaniu w programie modeli obiektów ze świata rzeczywistego. Praca programisty polega na ożywieniu tych obiektów oraz sprawienia aby zaczęły ze sobą współpracować.
4
Programowanie obiektowe, a proceduralne
Podejście obiektowe różni się od tradycyjnego programowania proceduralnego, gdzie dane i procedury nie są ze sobą bezpośrednio związane. Programowanie obiektowe ma ułatwić pisanie, konserwację i wielokrotne użycie programów lub ich fragmentów. W programowaniu obiektowym tworzy się świat, a nie kod. Kod (implemetacja) jest tylko uruchomieniem/włożeniem życia w ten świat
5
Zalety programowania obiektowego
Modelowanie świata rzeczywistego Dzieje się to w sposób łatwiejszy dla człowieka. Można to robić nie umiejąc programować w żadnym języku programowania Powtórne użycie kodu (ang. reusablity) Kod raz zapisany może zostac wykorzystany wielokrotnie. Realizowane jest to dzięki dziedziczeniu (metody z nadklasy są dostępne w klasach pochodnych).
6
Zalety programowania obiektowego
Rozszerzalność (ang. extensibility) Dzieje się to w sposób łatwiejszy dla człowieka. Można to robić nie umiejąc programować w żadnym języku programowania Powtórne użycie kodu (ang. reusablity) Kod raz zapisany może zostac wykorzystany wielokrotnie. Realizowane jest to dzięki dziedziczeniu (metody z nadklasy są dostępne w klasach pochodnych).
7
Zalety programowania obiektowego
Większa skuteczność w wykrywaniu błędów Dzięki związaniu metod z obiektami nie są możliwe błędy niepoprawnegowywołania funkcji z nieuprawnionymi argumentami (metody operują na danych związanych z obiektem). Mnimializowana jest więc ilość błędów niepoprawnego użycia funkcji. • Prostota w programowaniu interfejsów użytkownika Programowanie zorientowane obiektowo wprost odpowiada potrzebom tworzenia „okienowych” interejsów użytkownika. Okna mogą być postrzegane jako obiekty, składające się z innych obiektów (przyciski, elementy menu, itd.)
8
Analiza obiektowa Celem analizy obiektowej (object-oriented analysis) jest udzielenie odpowiedzi na pytanie: jak system ma działać? • Zadania realizowane podczas analizy: – utworzenie logicznego modelu systemu opisującego sposób realizacji przez system postawionych wymagań (model logiczny pomija większość szczegółów implementacyjnych), – określenie podstawowego „słownika” wiedzy dziedzinowej w celu ułatwienia analizy i następnie konstruowania aplikacji. • Realizowane jest to poprzez znalezienie i opisanie obiektów - rozumianych jako koncepty – w rozpatrywanej dziedzinie. • Tworzone modele zapisywane są przy pomocy notacji definiowanych w językach modelowania (np. UML).
9
Projektowanie obiektowe
Celem projektowania obiektowego jest udzielenie odpowiedzi na pytanie: jak system ma zostać zaimplementowany? • Zadania realizowane podczas projektowania: – opracowanie szczegółowego opisu implementacji systemu, – zdefiniowanie obiektów wykorzystywanych w programie. • Realizowane jest to poprzez określenie zasad współpracy obiektów w taki sposób aby zrealizowane były wymagania (określenie atrybutów, metod, itd.). • Struktura tworzonego oprogramowania powinna jak najbardziej zachowywać ogólną strukturę modelu stworzonego w poprzedniej fazie. • W fazie projektowania wykorzystuje się tą samą notację, co w fazie analizy.
10
Programowanie obiektowe
Implementacja (kodowanie) projektu oprogramowania w wybranym środowisku implementacyjnym: – wykorzystanie języka obiektowego, – powtórne użycie już istniejących bibliotek obiektowych, – wykorzystanie narzędzi szybkiego wytwarzania aplikacji, – wykorzystanie generatorów kodu. • Podjęcie kroków mających doprowadzić do wytworzenia niezawodnego oprogramowania: – unikanie niebezpiecznych technik, – zasada ograniczonego dostępu, – stosowanie kompilatorów sprawdzających zgodność typów.
11
Struktury Struktura pozwala przechowywać połączone ze sobą dane różnego typu i łączy je w pojedyncze obiekty. Np. gdy chcemy zapisać dane osobowe jakiegoś człowieka (imię, nazwisko i wiek), nie da się tego zrobić przy pomocy jednej zmiennej lub tablicy, gdyż dane takie zawierają trzy parametry różnego typu. Wówczas możemy zdefiniować strukturę, w której zapamiętamy naraz wszystkie te trzy rzeczy. Strukturę deklaruje się przy użyciu słowa kluczowego struct oraz nazwy struktury. Po niej w nawiasach klamrowych umieszcza się deklaracje zmiennych, które wchodzą w skład tej struktury. Po nawiasie klamrowym może wystąpić nazwa zmiennej określonego właśnie przed chwilą typu. Jeśli nie pojawia się nazwa zmiennej, to w tym miejscu wyjątkowo po nawiasie klamrowym zamykającym trzeba umieścić średnik.
12
Struktury Składnia struktury:
struct nazwa_struktury { typ_1 nazwa_pola_1; typ_2 nazwa_pola_2; ... typ_N nazwa_pola_N; }; // W tym miejscu przed średnikiem można od razu zadeklarować zmienną tego typu. Na przykład: struct Osoba { char imie[20], nazwisko[50]; int wiek; }; Osoba pewna_osoba; pewna_osoba.wiek = 23;
13
Unie Unia jest bardzo podobna do struktury, jednakże wszystkie jej pola zajmują ten sam obszar pamięci. Jedyną różnicą składniową jest używanie słowa kluczowego union w miejsce struct.
14
Unie Składnia Unii. Np: union nazwa_unii {
char tablica_znakowa[4]; int wartosc; } u;
15
Klasy Klasy są pewnymi strukturami, które oprócz pól (atrybutów) posiadają też metody, czyli pewne funkcje, które dana klasa może wykonywać. Klasa to typ danych, podobnie jak char, int, struct Deklaracja klasy w języku C++ wygląda następująco: class nazwa_klasy { // składowe klasy: pola i metody };
16
Klasy Składniki klasy:
– zbiór „danych składowych” - atrybuty (zero lub więcej) – zbiór „funkcji składowych” - metody (zero lub więcej) – słowa kluczowe rozstrzygające o widoczności składowych klasy (public, private, protected) • Deklaracja klasy to wskazanie jakie elementy są związane z daną klasą
17
Klasy Atrybuty (dane składowe)
– zmienne dowolnego typu wykorzystywane do przechowywania danych związanych z klasą – Przykład class Czas { public: int rok; int miesiac; int dzien; } • Metody (funkcje składowe): – funkcje związane z klasą wykorzystywane do przeprowadzania operacji na danych – Przykład: void Wyswietl(void); void UstawCzas(time x); };
18
Obiekty W oparciu o klasę tworzymy obiekty np. Czas spotkanie;
• Sama definicja klasy nie definiuje żadnych obiektów • Obiekt utworzony zgodnie z daną klasą nazywamy instancją lub wystąpieniem klasy. • Związki pomiędzy obiektem, a klasą: – atrybuty są przechowywane w pamięci niezależnie dla każdej instancji danej klasy – metody są przechowywane jednokrotnie dla danej klasy • W definicji klasy nie jest możliwe przypisywanie wartości początkowych dla atrybutów • Zasady odwoływania się do składowych obiektu: spotkanie.miesiac = 3; spotkanie.Wyswietl(); spotkanie.ustalMiesiac(4);
19
Obiekty Obiekt jest osobą miejscem lub rzeczą obserwowaną w świecie rzeczywistym, którego dotyczy system informatyczny • Obiekt jest odróżnialny od innych obiektów, ma nazwę i dobrze określone granice • W programowaniu obiektowym obiekt reprezentuje to, co system musi wiedzieć i robić z rzeczywistą osobą, miejscem lub rzeczą • Obiekty mogą być dowolnie złożone oraz dowolnie duże • Dla każdego obiektu wyróżniamy: – tożsamość obiektu – stan obiektu – zachowanie obiektu
20
Obiekty Co jest obiektem: – osoba Jan Kowalski
– konto Jana Kowalskiego – samochód Toyota Corolla, numer rejestracyjny PWA 9999, kolor zielony, rocznik 1992 – pogoda w dniu 21 lutego 2001 • Co nie jest obiektem: – kolor zielony – zachód słońca – zmiana czasu
21
Obiekty Tożsamość obiektu pozwala wyróżnić dany obiekt spośród innych obiektów • W praktyce implementacyjnej tożsamość obiektu oznacza, że posiada on unikalny wewnętrzny identyfikator nadawany automatycznie przez system, niezależnie od woli projektanta lub programisty (tożsamość = trwały wewnętrzny identyfikator) • Może się zdarzyć, że z punktu widzenia programisty dwa obiekty są nierozróżnialne ze względu na swoje własności i zachowanie. Niemniej są to zawsze dwa różne obiekty
22
Metody Zachowanie obiektu - zestaw operacji które wolno stosować dla danego obiektu • Implemetacja operacji to metody • Aktualny stan obiektu jest dostępny jedynie poprzez metody • Metoda działa wykorzystując wewnętrzne informacje obiektu, przede wszystkim wartości atrybutów • Metoda = „mała procedura” (niezbyt duży stopień skomplikowania, nie angażowanie zbyt dużych zasobów z zewnątrz klasy oraz brak efektów ubocznych na środowisko spoza wnętrza obiektu)
23
Klasy Klasa jest miejscem przechowywania tych informacji dotyczących obiektów, które są dla nich niezmienne, wspólne lub dotyczą całej ich populacji. Takie informacje nazywane są inwariantami obiektów. • Inwarianty dotyczące jednego obiektu mogą być przechowywane w wielu klasach tworzących hierarchię lub inną strukturę dziedziczenia. • Obiekt przypisany do klasy zawierającej jego inwarianty jest nazywany jest wystąpieniem lub instancją
24
Cechy programowania obiektowego
Abstrakcja Hermetyzacja (!) Polimorfizm Dziedziczenie
25
Abstrakcja Każdy obiekt w systemie służy jako model abstrakcyjnego "wykonawcy", który może wykonywać pracę, opisywać i zmieniać swój stan oraz komunikować się z innymi obiektami w systemie bez ujawniania, w jaki sposób zaimplementowano dane cechy. Procesy, funkcje lub metody mogą być również abstrahowane, a kiedy tak się dzieje, konieczne są rozmaite techniki rozszerzania abstrakcji.
26
Hermetyzacja Z ang. Encapsulation, czasem Enkapsulacja
zamknięcie pewnego zestawu bytów programistycznych (danych i funkcji) w jedną „kapsułę” o dobrze ograniczonych granicach, oddzielenie abstrakcyjnej specyfikacji kapsuły od jej implementacji, ukrycie części informacji zawartej w kapsule dla operacji z zewnątrz obiektu. Zasada hermetyzacji głosi, że programista ma tyle wiedzieć o tworzonym bycie programistycznym ile mu trzeba, aby go efektywnie używać. Wszystko co może być przed programistą ukryte powinno być ukryte. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko własne metody obiektu są uprawnione do zmiany jego stanu. Każdy typ obiektu prezentuje innym obiektom swój interfejs, który określa dopuszczalne metody współpracy.
27
Polimorfizm Referencje i kolekcje obiektów mogą dotyczyć obiektów różnego typu, a wywołanie metody dla referencji spowoduje zachowanie odpowiednie dla pełnego typu obiektu wywoływanego. Jeśli dzieje się to w czasie działania programu, to nazywa się to późnym wiązaniem lub wiązaniem dynamicznym. Niektóre języki udostępniają bardziej statyczne (w trakcie kompilacji) rozwiązania polimorfizmu – na przykład szablony i przeciążanie operatorów w C++.
28
Dziedziczenie Porządkuje i wspomaga polimorfizm i enkapsulację
umożliwia definiowanie i tworzenie specjalizowanych obiektów na podstawie bardziej ogólnych. Dla obiektów specjalizowanych nie trzeba redefiniować całej funkcjonalności, lecz tylko tę, której nie ma obiekt ogólniejszy. W typowym przypadku powstają grupy obiektów zwane klasami, oraz grupy klas zwane drzewami. Odzwierciedlają one wspólne cechy obiektów.
29
Programowanie zgodnie z paradygmatem
Atrybuty deklarujemy w sekcji prywatnej (private) W celu zapewnienia dostępu do atrybutów wprowadzamy tzw. akcesory (metody przypisujące i zwracające wartości atrybutów) Metody tworzone z myślą o wykorzystaniu przez inne klasy deklarujemy w sekcji publicznej ( public) Metody tworzone jedynie z myślą o wykorzystaniu w obrębie danej klasy deklarujemy w sekcji prywatnej (private) W sekcjiprotected deklarujemy atrybuty i metody, które mają być wykorzystane w klasach pochodnych Wskazane jest aby metody danej klasy wykonywały operacje związane z atrybutami tej klasy Klasy nie powinny się komunikować przy pomocy zmiennych globalnych
30
(Moment na kreatywność studentów)
Przykład (Moment na kreatywność studentów)
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.