Programowanie obiektowe. Grzegorz Jabłoński Katedra Mikroelektroniki i Technik Informatycznych (K-25) Budynek B18

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

Modelowanie i Programowanie Obiektowe

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Technologie obiektowe

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Podstawy Programowania Obiektowego

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1

Podstawy programowania III WYKŁAD 4

Projektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34

Programowanie obiektowe - 1.

Świat rzeczywisty i jego model

Zagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)

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

Style programowania - krótki przeglad

Język programowania. Andrzej Bobyk

Inżynieria oprogramowania. Część 5: UML Diagramy klas

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

Analiza i projektowanie obiektowe 2017/2018. Wykład 3: Model wiedzy dziedzinowej

Projektowanie obiektowe Wzorce projektowe. Gang of Four Strukturalne wzorce projektowe (Wzorce interfejsów)

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie obiektowe

Diagramy klas. dr Jarosław Skaruz

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Programowanie obiektowe

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

problem w określonym kontekście siły istotę jego rozwiązania

Programowanie Obiektowe i C++

UML cz. II. UML cz. II 1/38

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Modelowanie danych, projektowanie systemu informatycznego

Modelowanie obiektowe

Diagramy klas. WYKŁAD Piotr Ciskowski

UML w Visual Studio. Michał Ciećwierz

ZARZĄDZANIU. Wykład VI. dr Jan Kazimirski

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

Projektowanie logiki aplikacji


Programowanie obiektowe

Rysunek 1: Przykłady graficznej prezentacji klas.

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Projektowanie systemów informatycznych. Roman Simiński siminskionline.pl. Modelowanie danych Diagramy ERD

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w języku C++ Klasy w C++

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Podstawy inżynierii oprogramowania

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Języki i metody programowania Java. Wykład 2 (część 2)

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

Analiza i projektowanie aplikacji Java

Charakterystyka oprogramowania obiektowego

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

Diagramy czynności Na podstawie UML 2.0 Tutorial

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

Wykład 1 Inżynieria Oprogramowania

Zasady organizacji projektów informatycznych

Wprowadzenie do systemów informacyjnych

Podstawy modelowania programów Kod przedmiotu

Projektowanie Graficznych Interfejsów Użytkownika Robert Szmurło

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Modelowanie. Wykład 1: Wprowadzenie do Modelowania i języka UML. Anna Kulig

Programowanie w języku C++ Podstawowe paradygmaty programowania

Faza analizy (modelowania) Faza projektowania

Spis treúci. 1. Wprowadzenie... 13

Programowanie obiektowe

Historia modeli programowania

C++ Przeładowanie operatorów i wzorce w klasach

KARTA PRZEDMIOTU. 1) Nazwa przedmiotu: INŻYNIERIA SYSTEMÓW I ANALIZA SYSTEMOWA. 2) Kod przedmiotu: ROZ-L3-20

Wykład 8: klasy cz. 4

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

Szablony funkcji i szablony klas

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

Programowanie współbieżne i rozproszone

TECHNOLOGIE OBIEKTOWE. Wykład 3

Wykład I. Wprowadzenie do baz danych

INFORMATYKA GEODEZYJNO- KARTOGRAFICZNA. Modelowanie danych. Model związków-encji

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Materiały do zajęć VII

Szablony klas, zastosowanie szablonów w programach

hierarchie klas i wielodziedziczenie

Programowanie Obiektowe i C++ Marcin Benke

Faza Określania Wymagań

Podejście obiektowe - podstawowe pojęcia

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Wstęp [2/2] Wbrew częstemu przekonaniu, nie są one gotowymi rozwiązaniami, to tylko półprodukty rozwiązania.

Języki Programowania Obiektowego

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Inżynieria Programowania - Projektowanie architektoniczne

Zaawansowane programowanie w C++ (PCP)

Diagramu Związków Encji - CELE. Diagram Związków Encji - CHARAKTERYSTYKA. Diagram Związków Encji - Podstawowe bloki składowe i reguły konstrukcji

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Diagramy UML, przykład problemu kolizji

Wprowadzenie do szablonów szablony funkcji

Wstęp do programowania obiektowego. Wykład 2

UML (Unified Modeling Language jest to sposób formalnego opisu modeli reprezentujących projekty informatyczne.

Paweł Kurzawa, Delfina Kongo

Wprowadzenie do szablonów szablony funkcji

Transkrypt:

Programowanie obiektowe Grzegorz Jabłoński Katedra Mikroelektroniki i Technik Informatycznych (K-25) Budynek B18 gwj@dmcs.p.lodz.pl (631) 26-48

Program przedmiotu http://neo.dmcs.p.lodz.pl/po Ogólne spojrzenie na język C++ Klasy Pola i metody Przeciążenie operatora Dziedziczenie Funkcje wirtualne Wzorce Obsługa wyjątków Hierarchie klas Biblioteka standardowa C++ (STL) 2

Dzisiejszy wykład Cele projektowania Paradygmaty programowania Proces projektowania obiektowego Podstawy projektowania obiektowego Abstrakcja Interfejsy Zadania Współpracownicy Przykład Identyfikacja obiektów Identyfikacja relacji 3

Cele projektowania Ponowne użycie Opracowanie przenośnych i niezależnych komponentów, które mogą być ponownie użyte w wielu systemach Rozszerzalność Wsparcie dla zewnętrznych modułów rozszerzających (np. Photoshop plug-ins) Elastyczność Łatwość zmian przy dodaniu dodatkowych danych/możliwości Małe prawdopodobieństwo totalnego uszkodzenia systemu przy zmianach w projekcie Lokalne efekty zmian 4

Proces projektowania Cel: zbudować system Proces projektowania przebiega następująco: Podział/opis systemu jako zespołu komponentów Podział/opis komponentów jako zespołu mniejszych komponentów Pojęcie abstrakcji Podstawowe w procesie projektowania, ukrywa szczegóły komponentów nieistotne w bieżącej fazie projektowania Identyfikacja komponentów metodą zstępującą Stopniowy podział systemu na coraz mniejsze, prostsze komponenty Integracja komponentów metodą wstępującą Budowa systemu przez składanie komponentów na różne sposoby Projekt odbywa się zgodnie z paradygmatem: proceduralnym, modularnym, obiektowym 5

Abstrakcja Nazwany zbiór atrybutów i sposobu zachowania konieczny do modelowania obiektu w określonym celu Pożądane właściwości Dobrze nazwany nazwa oddaje cechy abstrakcji Spójny Dokładny Minimalny Kompletny sensowny zawiera tylko atrybuty modelowanego obiektu zawiera tylko atrybuty niezbędne dla określonego celu zawiera wszystkie atrybuty niezbędne dla określonego celu 6

Formy abstrakcji Funkcje (projektowanie proceduralne) Zdefiniowanie zbioru funkcji w celu wykonania zadania Przekazywanie informacji między funkcjami Wynik: hierarchiczna organizacja funkcji Moduły (projektowanie modularne) Zdefiniowanie modułów, w których są dane i procedury Każdy moduł posiada sekcję prywatną i publiczną Moduł grupuje powiązane dane i procedury Moduł działa jako mechanizm zasięgu Klasy/obiekty (projektowanie obiektowe) Abstrakcyjne typy danych Podział projektu na zbiór współpracujących klas Każda klasa pełni bardzo szczególne funkcje Klasy mogą być użyte do tworzenie wielu egzemplarzy obiektów 7

Paradygmat proceduralny Zastosowanie dekompozycji proceduralnej Podział problemu na sekwencję prostszych podproblemów rozwiązywanych niezależnie Program składa sie z sekwencji wywołań procedur Projektant myśli używając pojęć zadań i podzadań, identyfikując co musi być zrobione na jakich danych Tradycyjne języki proceduralne: COBOL, FORTRAN, C Notacja projektowa: diagramy strukturalne, diagramy przepływu danych 8

Problemy podejścia proceduralnego Otrzymujemy duży program złożony z wielu małych procedur Brak naturalnej hierarchii organizującej te procedury Często nie jest jasne, która procedura co wykonuje na których danych Słaba kontrola potencjalnego dostępu procedur do danych Powyższe cechy powodują, że usuwanie błędów, modyfikacja i pielęgnacja są trudne Naturalna wzajemna zależność procedur spowodowana przekazywaniem danych (albo, co gorsza, danymi globalnymi) powoduje, że trudno jest je ponownie użyć w innych systemach 9

Przykład podejścia proceduralnego Rozważmy dziedzinę zastosowań geometrycznych (kształty, kąty, dodawanie punktów i wektorów) void distance(int x1, int y2, int x2, int y2, float& distance); void angle2radian(float degree, float& radian); void radian2angle(float radian, float& degree); void circlearea(int centerx, int centery, int radius, float& area); void squarearea(int x1, int x2, int width, int height, float &area); void squareperimeter(int x1, int x2, int width, int height, float &prm);... Centralnym aspektem projektu jest procedura, nie dane W rzeczywistości brak oddzielnej reprezentacji danych 10

Programowanie modularne Względnie proste rozszerzenie czystego podejścia proceduralnego Dane i związane z nimi procedury są zebrane w modułach Moduł zapewnia jakąś metodę ukrycia jego zawartości W szczególności, dane mogą być modyfikowane tylko przez procedury w tym samym module Proces projektowania uwypukla dane w stosunku do procedur. Najpierw identyfikujemy niezbędne elementy danych, a potem dopisujemy procedury, które na nich operują Typowe języki programowania: Ada 83, Modula 11

Problemy w projektowaniu modularnym Moduły rozwiązują większość problemów z programowaniem proceduralnym wymienionych uprzednio. Moduły pozwalają na jedynie częściowe ukrywanie informacji w porównaniu z podejściem obiektowym Nie można mieć kilku kopii jednego modułu, co ogranicza projektanta 12

Przykład projektowania modularnego // Geometry Module struct Circle { int centerx, centery; int radius; }; struct Square { int x1, x2, width, height; }; Circle *NewCircle(int center, int radius); Square *NewSquare(int x1, int x2, int width, int height); float CircleArea(Circle& c); float SquareArea(Square& s); float SquarePerimeter(Square& s); void distance(int x1, int y2, int x2, int y2, float& distance); void angle2radian(float degree, float& radian); void radian2angle(float radian, float& degree);... Centralnym aspektem projektu jest procedura, ale występuje również reprezentacja danych Pojęcie punktu nie wprowadzone, bo nie jest potrzebne w projekcie i nie byłoby z tego żadnych korzyści 13

Paradygmat obiektowy Analogia do konstruowania maszyny z części składowych Każda część jest obiektem, który posiada swoje atrybuty i właściwości oraz współdziała z innymi częściami w celu rozwiązania problemu Identyfikacja klas obiektów, które mogą być ponownie użyte Myślenie używając pojęć obiektów i ich wzajemnego oddziaływania Na wysokim poziomie abstrakcji, myślenie o obiektach jako bytach samych w sobie, nie wewnętrznych strukturach potrzebnych do działania obiektu Typowe języki obiektowe: Smalltalk, C++, Java, Eiffel 14

Dlaczego podejście obiektowe? To po prostu kolejny paradygmat... (i zapewne będą kolejne) Każdy system zaprojektowany i zaimplementowany obiektowo może być zbudowany używając czystego podejścia proceduralnego Podejście obiektowe jednakże ułatwia pewne rzeczy Podczas projektowania na wysokim poziomie, często bardziej naturalne jest myślenie o problemie używając pojęć zespołu oddziałujących na siebie rzeczy (obiektów), niż pojęć danych i procedur Podejście obiektowe często ułatwia zrozumienie i kontrolę nad dostępem do danych Podejście obiektowe promuje ponowne użycie 15

Przykład projektu obiektowego class Point {... float distance(point &pt); }; class Shape { float Area(); float Perimeter(); Point center(); } class Circle : Shape { private: Point center; int radius; public: // constructors, assignment operators, etc... float Area(); // calc my area float Perimeter(); }; class Square : Shape { private: Point anchor; int width, height; public: // constructors, assignment operators, etc... float Area(); float Perimeter(); };... Centralnym aspektem projektu są teraz dane, operacje są zdefiniowane razem z danymi 16

Strategie projektowe w podejściu obiektowym Abstrakcja Separacja Kompozycja Generalizacja modelowanie niezbędnych właściwości oddzielenie co od jak budowanie złożonych struktur z prostszych identyfikacja elementów wspólnych Strategie projektowe abstrakcja separacja kompozycja generalizacja Struktury programowe obiekty klasy dziedziczenie wzorce wzorce projektowe Cele inżynierii oprogramowania ponowne użycie rozszerzalność elastyczność 17

Odwzorowanie abstrakcji i oprogramowania świat rzeczywisty abstrakcja oprogramowanie atrybuty {dana, dana,...} obiekt zachowanie {metoda, metoda,...} 18

Odwzorowanie abstrakcji i oprogramowania (OO) świat rzeczywisty abstrakcja oprogramowanie atrybuty {dana, dana,...} obiekt zachowanie {metoda, metoda,...} 19

Oddzielenie interfejsu od implementacji W programowaniu: niezależna specyfikacja interfejsu i jednej lub wielu implementacji tego interfejsu. Co zrobić vs. Jak to zrobić Widoczne Ukryte Interfejs Implementacja Dodatkową korzyścią jest możliwość programowania uzależnionego od interfejsu bez zajmowania się jego implementacją Programowanie oparte na kontrakcie Umożliwia abstrakcję w procesie projektowania 20

Ogólna struktura klasy Klasa nazwana reprezentacja programowa abstrakcji która oddziela implementację reprezentacji od interfejsu reprezentacji Klasa modeluje abstrakcję, która modeluje obiekt (być może "rzeczywisty") Klasa reprezentuje wszystkich członków grupy obiektów ("egzemplarze" klasy) Klasa dostarcza publiczny interfejs i prywatną implementację Ukrywanie danych i algorytmów przed użytkownikiem jest ważne. Ograniczenia dostępu zabezpieczają (częściowo) przed przypadkową, błędną lub złośliwą zmianą. Typowa organizacja { dana, dana.... } { metoda, metoda.... } public private 21

Proces projektowania obiektowego Ograniczenie obszaru zastosowań: przypadki użycia (scenariusze, opisy użytkowania) Identyfikacja obiektów (dane) Identyfikacja zadań (zachowanie) Definicja zachowania Identyfikacja współpracowników Czy zachowanie jest osiągnięte przez pojedynczą klasę, czy przez współpracę "spokrewnionych" klas Zachowanie statyczne Zawsze się tak samo zachowuje Zachowanie dynamiczne W zależności od warunków (rodzaj, źródło wywołania) zachowanie jest możliwe lub nie Identyfikacja relacji między obiektami Kompozycja przez asocjację, agregację, inne 22

Początek Na początku... jest specyfikacja Specyfikacja: Zaprojektować katalog płyt z muzyką. System musi umożliwiać dodawanie płyt, przechowywanie informacji o wykonawcach, tytułach albumów, tytułach utworów, kompozytorach itp. Użytkownik systemu powinien mieć możliwość wyszukiwania dowolnej informacji w kolekcji. Powinien także umożliwiać przeglądanie kolekcji przez użytkownika. Specyfikacja jest zwykle niewystarczająca Wiele istotnych rzeczy nie jest powiedziane Często zawiera wiele stwierdzeń nieistotnych 23

Identyfikacja obiektów Należy zidentyfikować potencjalne obiekty w specyfikacji wyeliminować fałszywych kandydatów określić interakcje między "prawdziwymi" obiektami stworzyć klasy z obiektów Ten proces: wymaga doświadczenia żeby go prawidłowo przeprowadzić istnieją standardowe podejścia do problemu, nie zawsze w pełni dostosowane do konkretnej sytuacji często kilka podejść jest używanych jednocześnie powinien raczej prowadzić do zbyt dużej, a nie zbyt małej liczby obiektów 24

Kilka podejść do problemu Abbott and Booch używać rzeczowników i zaimków do zidentyfikowania obiektów i klas liczba pojedyncza -> obiekt, liczba mnoga -> klasa nie wszystkie rzeczowniki zostaną obiektami Coad and Yourdon: identyfikować pojedyncze lub grupowe "rzeczy" w systemie/problemie Ross sugeruje kilka powszechnych kategorii obiektów ludzie miejsca rzeczy organizacje pojęcia wydarzenia 25

Obiekty i dziedzina problemu Co jest "potencjalnym obiektem" zależy od dziedziny problemu Należy dyskutować z ekspertem w danej dziedzinie - osobą, która pracuje w dziedzinie, w której system będzie pracował Należy starać się zidentyfikować obiekty na podstawie sposobu myślenia eksperta o problemie Specyfikacja: Zaprojektować katalog płyt z muzyką. System musi umożliwiać dodawanie płyt, przechowywanie informacji o wykonawcach, tytułach albumów, tytułach utworów, kompozytorach itp. Użytkownik systemu powinien mieć możliwość wyszukiwania dowolnej informacji w kolekcji. Powinien także umożliwiać przeglądanie kolekcji przez użytkownika. 26

Eliminacja "fałszywych" obiektów Obiekt powinien: być bytem występującym w świecie rzeczywistym być istotnym elementem wymagań mieć ściśle określoną granicę mieć sens - atrybuty i zachowanie powinny być powiązane Złe znaki: nazwa klasy jest czasownikiem klasa jest opisana jako wykonywanie operacji klasa obejmuje wiele abstrakcji klasa ma tylko jedną metodę publiczną klasa nie ma metod 27

Przykład: katalog płyt Wyszukiwanie rzeczowników Pierwsza próba: muzyka katalog (kolekcja) Specyfikacja: Zaprojektować katalog płyt z muzyką. System musi umożliwiać dodawanie płyt, przechowywanie informacji o wykonawcach, tytułach albumów, tytułach utworów, kompozytorach itp. Użytkownik systemu powinien mieć możliwość wyszukiwania dowolnej informacji w kolekcji. Powinien także umożliwiać przeglądanie kolekcji przez użytkownika. system użytkownik utwór tytuł wykonawca album (płyta) kompozytor informacja 28

Przykład: katalog płyt Odrzucamy (na razie): muzyka (odnosi się do rodzaju przechowywanej informacji, ale nie przechowujemy muzyki) katalog (kolekcja, system) - znaczy to samo informacja - ogólna nazwa elementów kolekcji użytkownik - zewnętrzny w stosunku do systemu, gra rolę w systemie utwór, tytuł, wykonawca, kompozytor Wymagane struktury danych: Czy tytuł jest klasą? katalog zawiera kolekcję nagrań A nazwisko? album ma tytuł, wykonawcę, listę utworów utwór ma tytuł, kompozytora, wykonawcę 29

Przykład: katalog płyt Co z ogólnym sterowaniem całością? Główny sterownik może być procedurą lub obiektem Kolekcja Użytkownik używa katalogu, który zawiera kolekcję, listę obiektów typu płyta. Umożliwia wykonanie każdej z żądanych operacji Kolekcja powinna reagować na zdarzenia, a nie aktywnie ich poszukiwać. W implementacji konieczne jest przetwarzanie pliku wejściowego lub graficzny interfejs użytkownika (GUI). To nie jest część kolekcji, aczkolwiek będzie z nią współpracować. 30

Ogólna struktura obiektu Obiekt: osobny egzemplarz pewnej klasy który ukrywa szczegóły implementacji i jest strukturalnie identyczny z wszystkimi obiektami danej klasy Obiekt łączy dane i operacje, które mogą być wykonywane na tych danych składowe = pola + metody Dane prywatne obiektu są dostępne jedynie za pośrednictwem metod klasy Obiekt ukrywa szczegóły implementacyjne przed użytkownikiem metoda kod dane metoda kod interfejs implementacja 31