Wprowadzenie do programowania w języku C++ Rozdział I Modelowanie obiektowe Witold Bartkiewicz.

Slides:



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

Programowanie obiektowe
Związki w UML.
Programowanie obiektowe PO PO - LAB 2 Wojciech Pieprzyca.
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 4 Wojciech Pieprzyca.
Programowanie obiektowe
Modelowanie przypadków użycia
Modelowanie klas i obiektów
Jarosław Kuchta Dokumentacja i Jakość Oprogramowania
Języki programowania C++
OOPC++ - wstêp, klasy1 Klasy Do struktury można dołączyć operacje działające na jej polach. struct date { int day, month, year; void set (int d, int m,
Internet Communication Engine
08: ERD – podencje, łuki i pułapki
Struktury.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
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
Podstawy programowania
Podstawy programowania II
T: Różnice pomiędzy programowaniem strukturalnym a obiektowym
Źródła: podręcznikopracował: A. Jędryczkowski.
Podstawy programowania
Programowanie strukturalne i obiektowe
KARTY BANKOWE.
Jakub Wołczko W obiektowym świecie… Jakub Wołczko
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Programowanie obiektowe – zastosowanie języka Java SE
Programowanie obiektowe III rok EiT
WPROWADZENIE W ŚWIAT OBIEKTÓW
Dziedziczenie Maciek Mięczakowski
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Programowanie obiektowe – język C++
1 Analiza obiektowa Peter Coad / Edward Yourdon Analiza obiektowa wydawnictwo: Oficyna Wydawnicza READ ME, Warszawa 1994 dr Waldemar Wolski.
Programowanie obiektowe 2013/2014
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
1 Każdy obiekt jest scharakteryzowany poprzez: tożsamość – daje się jednoznacznie wyróżnić; stan; zachowanie. W analizie obiektowej podstawową strukturą
Modelowanie obiektowe Diagramy UML – diagram przypadków użycia
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.
Modelowanie obiektowe Diagramy klas
Programowanie w języku C++
Programowanie strukturalne i obiektowe 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.
Interakcja człowiek – komputer Podstawy metod obiektowych mgr inż. Marek Malinowski Zakład Matematyki i Fizyki Wydz. BMiP PW Płock.
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)
Proces tworzenia oprogramowania Proces tworzenia oprogramowania jest zbiorem czynności i związanych z nimi wyników, które prowadzą do powstania produktu.
Przykłady analiza i projektowanie
Modelowanie obiektowe - system zarządzania projektami.
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Diagram obiektów Diagram obiektów ukazuje elementy i związki z diagramu klas w ustalonej chwili. Diagram obiektów jest grafem złożonym z wierzchołków i.
Programowanie Zaawansowane
Unified Modeling Language
Wykład 2 Programowanie obiektowe. Programowanie obiektowe wymaga dobrego zrozumienia działania funkcji definiowanych przez użytkownika, w ten sposób będziemy.
Inżynieria systemów informacyjnych
Programowanie Obiektowe – Wykład 6
Programowanie Obiektowe – Wykład 2
Aplikacje i usługi internetowe
PGO - Projektowanie i implementacja pierwszych klas
PGO Dziedziczenie Michail Mokkas.
Modele baz danych - spojrzenie na poziom fizyczny
Zapis prezentacji:

Wprowadzenie do programowania w języku C++ Rozdział I Modelowanie obiektowe Witold Bartkiewicz

Złożoność Problem: Rosnąca złożoność modelowanych zjawisk

Dekompozycja Rozbicie problemu na mniejsze. Rozbicie problemu na obiekty. Podział obiektów na mniejsze obiekty składowe i rozproszenie obszaru odpowiedzialności oryginalnego obiektu między te składowe. Na przykład samochód jest obiektem składającym się z prostszych komponentów, takich jak silnik, system paliwowy, układ sterowniczy, itp.

Znajdowanie obiektów 1 Ludzie, miejsca i rzeczy Jan Kowalski fabryka budynek samolot pojazd książka

Znajdowanie obiektów 2 Role pełnione przez osoby i organizacje doktor pacjent nauczyciel posiadacz konta pracownik dział

Znajdowanie obiektów 3 Wypadki i zdarzenia lot wypadek ruch myszą załamanie się systemu wezwanie obsługi

Znajdowanie obiektów 4 Interakcje sprzedaż małżeństwo spotkanie w interesach produkcja przyznanie kredytu

Interfejs i implementacja Interfejs: Widok zewnętrzny obiektu Pokazuje jedynie co dany obiekt może zrobić, ukrywając szczegóły tego jak operacje te są wykonywane. Umożliwia to użytkownikowi korzystanie z usług obiektu w sposób prosty Implementacja: Wewnętrzny obraz obiektu. Sposób w jaki sposób obiekt wykonuje swoje zadania. Przykład: bankomat – prosty interfejs pozwalający na wykonanie skomplikowanych operacji, bez konieczności analizowania sposobu w jaki są one realizowane.

Abstrakcja Abstrakcja polega na wyodrębnieniu cech istotnych z punktu widzenia celów modelowania i ignorowanie nieistotnych szczegółów. Z punktu widzenia sprzedawcy samochodów istotne są jego takie cechy jak cena, wygląd, parametry działania nie musi on znać np. szczegółów działania poszczególnych układów. Odmiennie jest z punktu widzenia mechanika: cena, wygląd mają mniejsze znaczenie. Niezbędna jest natomiast szczegółowa znajomość budowy i sposobu działania.

Pojęcie: Samochód Czy to jest samochód?

Pojęcie: Samochód Czy to jest samochód?

Pojęcie: Samochód Czy to jest samochód?

Pojęcie: Samochód Czy to jest samochód?

Pojęcie: Samochód Czy to jest samochód?

Pojęcie: Samochód Czy to jest samochód?

Obiekty Atrybuty – opisują cechy obiektu. Mogą być utożsamiane z danymi przechowywanymi przez obiekt. Np. stan konta jest atrybutem obiektów konta. Metody – reguły zarządzające zachowaniem obiektu, w odpowiedzi na przesyłane do niego sygnały. Np. obiekt konta może mieć takie metody jak wpłata i wypłata. Wartości atrybutów mogą się zmieniać. Stan konta może być odmienny dla różnych kont. Metody są niezmienne. Wpłata zawsze realizowana jest tak samo: dodaje wpłacaną kwotę do stanu konta. Wypłata podobnie. Sprawdza czy stan konta przekracza wypłacaną kwotę, jeśli tak to dokonuje wypłaty, zmniejszając stan konta. W przypadku przeciwnym operacja jest odrzucana i stan konta pozostaje bez zmian.

Hermetyzacja Hermetyzacja oznacza, że newralgiczne części obiektu, są ukryte i niedostępne dla świata zewnętrznego. Dotyczy to zwykle (ale nie tylko) atrybutów obiektu. Jedynym sposobem otrzymania informacji o obiekcie, lub wykonania jakiejś jego operacji jest wysłanie do niego komunikatu.

Tożsamość obiektów Różne obiekty mogą mieć jednakowe wartości atrybutów. Np. wiele kont bankowych może mieć w danym momencie jednakowy stan konta. Każdy obiekt powinien więc posiadać jednoznaczny identyfikator, odróżniający go od innych obiektów. Np. numer konta dla obiektu konta.

Atrybuty atrybuty opisujące - dostarczają faktów nieodłącznie związanych z każdym obiektem (egzemplarzem klasy) atrybuty nazywające - etykiety i nazwy utrzymywane przez każdy obiekt atrybuty referencyjne - powiązania między obiektami

Protokół przesyłania komunikatów Nazwa metody. Rodzaj dodatkowych wartości, zwanych argumentami, jakie muszą towarzyszyć wysyłanemu komunikatowi. Jakie warunki wstępne muszą być spełnione, przed przesłaniem komunikatu. Jakie warunki końcowe muszą być spełnione po przesłaniu komunikatu. Jakiego rodzaju wartość zwracana jest przez metodę przetwarzającą komunikat.

Protokół przesyłania komunikatów Wypłata Argument: wartość rzeczywista, wypłacana kwota Warunki wstępne: Parametr kwota powinien być dodatni. Warunki końcowe: Jeśli środki na koncie są wystarczające dla pokrycia wypłacanej kwoty zaktualizuj stan konta i zwróć 0. W przypadku przeciwnym nie zmieniaj stanu konta i zwróć 1. Wartość zwracana: wartość całkowita 1 lub 0.

Protokół przesyłania komunikatów Zewnętrzny widok obiektu, interfejs jest więc zbiorem wspólnych protokołów przesyłania komunikatów dla wszystkich obiektów klasy. Zdolność do odniesienia jednego protokołu przesyłania komunikatów do różnych metod nazywamy polimorfizmem. Zdolność odniesienia jednego interfejsu do obiektów różnych klas nazywamy zachowaniem polimorficznym obiektów.

Formowanie pojęć Świat zjawisk Postrzeganie

Formowanie pojęć Pojęcie 1 Pojęcie 2 Pojęcie 3 Pojęcie n Świat zjawisk Postrzeganie

Pojęcie: Samochód Przykłady Tak Nie

Pojęcia są abstrakcjami zjawisk świata rzeczywistego, które: Współdzielą wspólną charakterystykę Współdzielą wspólne reguły zachowania

Pojęcia są abstrakcjami zjawisk świata rzeczywistego, które: Współdzielą wspólną charakterystykę Współdzielą wspólne reguły zachowania

Pojęcia i C++ Pojęcie Class (Klasa) Egzemplarz Obiekt Zmienna obiektowa (Obiekt) Egzemplarz

Klasa obejmuje: Interfejs klasy. Strukturę atrybutów (schemat reprezentacji). Metody obiektów do niej należących. Klasa obejmuje strukturę atrybutów, ale nie ich wartości. Mogą być one odmienne dla różnych obiektów należących do niej. Zestawienie aktualnych wartości atrybutów nazywamy stanem obiektu.

Fabryki i klienci Wewnętrzne części klasy: metody oraz strukturę atrybutów nazywamy fabryką. Tak więc klasa definiowana jest poprzez fabrykę oraz interfejs. Klienci korzystają z usług obiektów utworzonych przez fabrykę, wysyłając do nich komunikaty. Interfejs klasy działa jak kontrakt między fabryką a klientem. Fabryka gwarantuje, że obiekt będzie działał zgodnie ze specyfikacjami, jeśli klient korzysta z odpowiedniego protokołu przesyłania komunikatów, określonego w interfejsie. Fabryka wie również w jaki sposób utworzyć obiekt. Nie wie jednak w jaki sposób zostanie on użyty. Może również nie znać liczby obiektów jaka zostanie skonstruowana.

class TBankAccount { //szczegóły pominięte float _balance; float _interestYTD; TClient* _owner; int _accountNumber };

class TBankAccount { // szczegóły pominięte float _balance; float _interestYTD; TClient* _owner; int _accountNumber }; struct TBankAccount { //szczegóły pominięte float balance; float interestYTD; struct TClient*owner; int accountNumber };

class TBankAccount { //many details omitted float _balance; float _interestYTD; TClient* _owner; int _accountNumber }; struct TBankAccount { //many details omitted float balance; float interestYTD; struct TClient* owner; int accountNumber }; // całe mnóstwo kodu int MakeDeposit( long acntNo, float amount}; float WithDraw( long acntNo, float amount}; float Print(long acntNo);

class TBankAccount { // szczegóły pominięte float _balance; float _interestYTD; TClient* _owner; int _accountNumber public: void MakeDeposit( float amount); float WithDraw( float amount); void Print(); }; struct TBankAccount { // szczegóły pominięte float balance; float interestYTD; struct TClient* owner; int accountNumber }; // całe mnóstwo kodu void MakeDeposit( long acntNo, float amount}; float WithDraw( long acntNo, float amount}; void Print(long acntNo);

Relacje między klasami Relacja „jest”, zwana również dziedziczeniem: obiekt jednej klasy należy również w pewnym sensie do innej, bardziej podstawowej klasy. Np. każdy obiekt należący do klasy „Student” jest również obiektem klasy „Osoba”. Relacja „ma: obiekt jednej klasy posiada obiekt innej klasy jako jedną ze swoich składowych. Np. Obiekt „Portfel” posiadać może jako jedną ze swoich składowych obiekt „Obligacja”.

Dziedziczenie („jest”) Dziedziczenie dotyczy w sytuacji w której obiekty jednej klasy mają wszystkie cechy obiektów drugiej klasy jak również ewentualne własne cechy dodatkowe. Np. każdy obiekt klasy „Student” ma wszystkie cechy obiektu klasy „Osoba” oraz pewne dodatkowe atrybuty i metody. Mówimy wówczas, że klasa „Student” dziedziczy wszystkie właściwości klasy „Osoba”. Dziedziczenie odzwierciedla związek generalizacji, między pojęciem (klasą) ogólniejszą (taką jak „Osoba”) i pojęciem (klasą) bardziej szczegółową (taką jak „Student”). Klasę ogólniejszą nazywamy klasą podstawową (lub bazową), klasę która z niej dziedziczy - klasą pochodną.

Hierarchie dziedziczenia Pojęcia układają się w pewne naturalne hierarchie generalizacji / uszczegółowiania. Struktury te mają przy tym charakter drzewiasty, tzn. jedno pojęcie (klasa) ogólniejsze może służyć jako podstawa większej liczby pojęć bardziej szczegółowych. Osoba StudentPracownik NauczycielPrac. inżynieryjny AsystentAdiunktProfesorSprzątaczkaPortier

Metody wirtualne (polimorficzne) Dziedziczone są nie tylko atrybuty klasy podstawowej, ale również jej metody. Metody w klasie pochodnej mogą wykonywać operację odziedziczoną z klasy podstawowej w inny sposób. Np. „Konto oszczędnościowe” i „Konto rozliczeniowe” są pochodnymi klasy „Konto”. W każdej z tych klas operacja wypłaty będzie realizowana nieco inaczej. Będzie to jednak zawsze operacja wypłaty. Takie metody nazywamy wirtualnymi lub polimorficznymi. Mogą one wykonywać operacje w różny sposób, muszą jednak zachowywać ten sam protokół przesyłania komunikatów.

Dekompozycja obiektu („ma”) Obiekt może zostać zbudowany z mniejszych części, poprzez użycie mniejszych obiektów jako komponentów składowych większego. Rodzajem tego typu związku „ma” są tzw. kontenery. Obiekty klas kontenerowych zarządzają zbiorem obiektów należących do innych klas.

6. Utworzenie środowiska dla budowy nowych klas nazwa_klasy.h – plik zawierający interfejs klasy (tzw. plik nagłówkowy). nazwa_klasy.cpp – plik zawierający metody klasy. plik zawierający kod klienta testującego klasę. Obecny etap rozpoczyna fazę implementacji systemu w języku C++. Tym niemniej podobne kroki wykonane muszą być również w przypadku wykorzystania innego języka programowania. Pierwszym krokiem jest utworzenie środowiska dla nowo tworzonych klas. Każda klasa wymaga utworzenia trzech plików:

6. Utworzenie środowiska dla budowy nowych klas (c.d.) class Konto { }; #include"konto.h"#include"konto.h" int main() { return 0; } konto.hkonto.cppkntmain.cpp

7. Implementacja i testowanie interfejsu klasy Implementacja interfejsu: class Konto { public: Konto(void); ~Konto(void); int Wyplata(double kwotaWyplaty); void Wplata(double kwotaWplaty); double PodajStanKonta(void); };

7. Implementacja i testowanie interfejsu klasy (c.d.) Implementacja zalążków metod: int Konto::Wyplata(double kwotaWyplaty){ return 0; } int Konto::Wplata(double kwotaWplaty) { return; }

7. Implementacja i testowanie interfejsu klasy (c.d.) #include "konto.h" int main(){ Konto mojeKonto; mojeKonto.Wplata(199.99); return 0; } Dodanie scenariusza testującego:

8. Implementacja atrybutów klasy class Konto { public: Konto(void); ~Konto(void); int Wyplata(double kwotaWyplaty); void Wplata(double kwotaWplaty); double PodajStanKonta(void); private: double StanKonta; };