Programowanie obiektowe

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

Język C/C++ Funkcje.
Programowanie obiektowe
Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Programowanie obiektowe
Programowanie obiektowe
Wzorce.
Static, const, volatile.
PROGRAMOWANIE STRUKTURALNE
Programowanie obiektowe w Javie
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Podstawy informatyki Rekurencja i rekurencja Grupa: 1A
Kurs Pascala – spis treści
Struktury.
Dziedziczenie i jego rodzaje
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
Typy prywatne 1 Typy prywatne W Adzie typy prywatne (private types) służą do bezpiecznego udostępniania danych zdefiniowanych w pakiecie, z którego korzysta.
Języki programowania obiektowego
Wstęp do programowania obiektowego
Projektowanie i programowanie obiektowe II - Wykład IV
Projektowanie i programowanie obiektowe II - Wykład II
Modele baz danych - spojrzenie na poziom fizyczny
Projektowanie - wprowadzenie
Wykład 4 Analiza i projektowanie obiektowe
Podstawy programowania
Podstawy programowania II
T: Różnice pomiędzy programowaniem strukturalnym a obiektowym
Źródła: podręcznikopracował: A. Jędryczkowski.
Programowanie strukturalne i obiektowe
Jakub Wołczko W obiektowym świecie… Jakub Wołczko
WPROWADZENIE W ŚWIAT OBIEKTÓW
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Dziedziczenie Maciek Mięczakowski
Inicjalizacja i sprzątanie
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Programowanie obiektowe – język C++
Programowanie obiektowe 2013/2014
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
2 Odizolowanie danych od kodu może prowadzić do przypadkowych zmian danych przez funkcje, które nie są z nimi logicznie związane. Ponadto modyfikacja.
Prasek Aneta, Skiba Katarzyna. Funkcje stałe const to takie funkcje, które nie mogą modyfikować stanu obiektu. Oznacza to, że funkcja stała nie może zmieniać.
Programowanie w języku C++
UML W V ISUAL S TUDIO Mateusz Lamparski. UML D EFINICJA Unified Modeling Language (UML) to graficzny język do obrazowania, specyfikowania, tworzenia i.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Diagram klas Kluczowymi elementami są: klasy (class)
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 2 ( ) Klasy i obiekty.
Klasy ( uzupełnienie ). Definicja klasy Klasa jest zbiorem logicznie powiązanych danych i funkcji, przeznaczonych do realizacji konkretnego zadania; Zamknięcie.
Paradygmat programowania obiektowego, klasa, obiekt
Projektowanie obiektowe. Przykład: Punktem wyjścia w obiektowym tworzeniu systemu informacyjnego jest zawsze pewien model biznesowy. Przykład: Diagram.
Dziedziczenie wielobazowe. dana klasa może mieć kilka bezpośrednich klas bazowych: dana klasa może mieć kilka bezpośrednich klas bazowych: kolorpołożenie.
Platforma .Net.
Programowanie Zaawansowane
Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia.
Wstęp do systemów informatycznych Diagramy klas. Odbiór świata  Myślenie o dziedzinie problemu powinno być możliwie zbliżone do myślenia o systemie 
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Temat: Tworzenie bazy danych
Inżynieria systemów informacyjnych
Programowanie Obiektowe – Wykład 6
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Programowanie Obiektowe – Wykład 2
PGO - Projektowanie i implementacja pierwszych klas
PGO Dziedziczenie Michail Mokkas.
Zapis prezentacji:

Programowanie obiektowe Podstawy Programowania dla geoinformatyków Wykład 4 Rafał Witkowski, 2015

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ń.

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ć.

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

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).

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).

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.)

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).

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.

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.

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.

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;

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.

Unie Składnia Unii. Np: union nazwa_unii { char tablica_znakowa[4]; int wartosc; } u;

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 };

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ą

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); };

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);

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

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

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

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)

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ą

Cechy programowania obiektowego Abstrakcja Hermetyzacja (!) Polimorfizm Dziedziczenie

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.

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.

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++.

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.

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

(Moment na kreatywność studentów) Przykład (Moment na kreatywność studentów)