Modelowanie obiektowe

Podobne dokumenty
Rozszerzenia składni C vs. C++

Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Obiektowe metody inżynierii oprogramowania OBIEKTOWE METODY INŻYNIERII OPROGRAMOWANIA

Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Podejście obiektowe składowe modelu:

Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Obiektowe metody inżynierii oprogramowania OBIEKTOWE METODY INŻYNIERII OPROGRAMOWANIA

Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Analiza obiektowa PROJEKTOWANIE OBIEKTOWE

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

ISO/ANSI C zakończenie. ISO/ANSI C zakończenie. ISO/ANSI C zakończenie. ISO/ANSI C zakończenie. ISO/ANSI C zakończenie

Lab 9 Podstawy Programowania

Podstawy Programowania Obiektowego

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

Język C++ Różnice między C a C++

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

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

Wykład 3 Składnia języka C# (cz. 2)

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

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Podstawy programowania skrót z wykładów:

Wykład 8: klasy cz. 4

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie obiektowe - 1.

Szablony funkcji i szablony klas

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

Wykład 5: Klasy cz. 3

Wskaźniki. Informatyka

Projektowanie logiki aplikacji

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

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

Język C zajęcia nr 11. Funkcje

Projektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Modelowanie danych, projektowanie systemu informatycznego

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

1 Projektowanie systemu informatycznego

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Podejście obiektowe - podstawowe pojęcia

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

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1

Modelowanie i Programowanie Obiektowe

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

Szablony klas, zastosowanie szablonów w programach

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

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

Podejście obiektowe wprowadzenie

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Wykład 4: Klasy i Metody

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Definiowanie własnych klas

Technologie i usługi internetowe cz. 2

Wskaźniki w C. Anna Gogolińska

UML w Visual Studio. Michał Ciećwierz

Programowanie obiektowe

Inżynieria oprogramowania Jarosław Kuchta. Modelowanie interakcji

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

Technologie obiektowe

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

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

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie współbieżne i rozproszone

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Paweł Kurzawa, Delfina Kongo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Świat rzeczywisty i jego model

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Język ludzki kod maszynowy

Materiały do laboratorium MS ACCESS BASIC

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Wykład 1: Wskaźniki i zmienne dynamiczne

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Materiały do zajęć VII

Programowanie obiektowe

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

Definicje klas i obiektów. Tomasz Borzyszkowski

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

Język C++ zajęcia nr 2

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Wstęp do programowania

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Zmienne, stałe i operatory

Analiza i projektowanie aplikacji Java

Diagramy klas. dr Jarosław Skaruz

Diagramy interakcji. Jarosław Kuchta Dokumentacja i Jakość Oprogramowania

TEMAT : KLASY DZIEDZICZENIE

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Transkrypt:

Obiektowe metody inżynierii oprogramowania 1. Analiza obiektowa (OOA Object Oriented Analysis) 2. (OOD Object Oriented Design) OBIEKTOWE METODY INŻYNIERII OPROGRAMOWANIA 3. Programowanie obiektowe (OOP Object Oriented Programming) Peter Coad, Edward Yourdon 1 2 Analiza obiektowa służy zbudowaniu modelu rzeczywistości wg pewnych zasad. MODELOWANIE OBIEKTOWE (ANALIZA I PROJEKTOWANIE) Trzymanie się tych zasad: daje spójną reprezentację stanowiącą podstawę analizy (co budować) i projektowania (jak budować), pozwala na identyfikację wspólnych cech atrybutów i usług, pozwala na budowę specyfikacji poddających się zmianom, pozwala na powtórne wykorzystanie wyników analizy dla rodzin systemów, pozwala na lepsze wzajemne zrozumienie analityka i eksperta w danej dziedzinie zastosowania. 3 4 Zarządzanie złożonością w analizie: Przyjęcie powszechnie stosowanych metod organizacji tworzenie klas obiektów i rozróżnianie ich; rozróżnienie między obiektem a jego atrybutami; rozróżnienie między całym obiektem a jego składowymi. Abstrakcja proceduralna pomijanie niektórych szczegółów rzeczy lub procesów wybierając tylko pewną istotną część na danym poziomie uogólnienia; definiujemy atrybuty oraz usługi, które mają wyłączność na manipulowanie tymi atrybutami. Zarządzanie złożonością w analizie: Hermetyzacja zasada używana przy budowie całościowej struktury programu: każda składowa programu powinna zamykać w sobie jedną decyzję projektową; styk z każdym modułem powinien być zdefiniowany tak, aby odkrywać możliwie mało ze swej wewnętrznej struktury. Dziedziczenie uproszczenie definicji klas podobnych do już definiowanych przez wykorzystanie tych zdefiniowanych w definicji nowych; opisuje generalizację i specjalizację czyniąc wspólne atrybuty i usługi jawnymi wewnątrz hierarchii klas. 5 6 1

Zarządzanie złożonością w analizie: Skojarzenie wiązanie ze sobą idei podobnych lub rzeczy które zdarzają się w tym samym czasie lub w podobnych okolicznościach. Komunikaty porozumiewanie się między obiektami. Skala pokazanie relacji między obiektami (części do całości) dla wyobrażenia sobie np. dużego lub bardzo małego obiektu. Zarządzanie złożonością w analizie: Kategorie zachowania reakcja na zdarzenie, zachowanie ze względu na podobieństwo ewolucji (zmiany w czasie), Zachowanie ze względu na podobieństwo funkcji. 7 8 Metody analizy: 1. inne niż obiektowe Rozkład funkcjonalny Metoda przepływu danych (Data Flow Diagrams) Modelowanie informacji (Entity Relationship Diagrams) Rozkład funkcjonalny (nieobiektowy) Dekompozycja algorytmiczna podział algorytmu na odrębne czynności: każdy projektowany moduł programowy systemu określa znaczący krok w procesie przetwarzania. 2. podejście obiektowe 9 10 Metoda przepływu danych (Data Flow Diagrams) (nieobiektowy) Graficzna prezentacja, tzw. diagram przepływu danych w procesie; zawiera następujące rodzaje elementów: - funkcje (procesy), - magazyny danych, - źródła i odbiorcy, - przepływy (znaki pokazujące kierunek przesyłu danych) Modelowanie informacji (Entity Relationship Diagrams) (nieobiektowy) Graficzna prezentacja logicznej struktury danych w bazie danych. Występujące pojęcia: encje (grupy lub kategorie danych) oraz atrybuty (podgrupy wewnątrz encji)). Relacje wewnątrz modelu: 1. Obowiązkowe 2. Opcjonalne 3. Wielu-do-wielu 4. Jeden-do-wielu 5. Jeden-do-jeden 6. Rekurencyjne 11 12 2

Modelowanie informacji (Entity Relationship Diagrams) (nieobiektowy) Graficzna prezentacja logicznej struktury danych w bazie danych: Podejście obiektowe Rodzaj dekompozycji, w której zamiast wyszczególniać czynności wyodrębnia się obiekty, na których dokonywane mogą być operacje. Data i miejsce urodzenia PESEL nazwisko kierowca imię adres 1 1 posiada kategorie Prawo jazdy numer Data wydania Data ważności Organ wydający Różnice: Dekompozycja algorytmiczna opisuje kolejność czynności dekompozycja obiektowa opisuje uczestniczące w czynnościach obiekty oraz wzajemne oddziaływanie obiektów na siebie. Dekompozycja algorytmiczna i obiektowa są sobie przeciwstawne nie można ich przeprowadzić jednocześnie. 13 14 Podejście obiektowe składowe modelu: Pojęcia Obiekty Związki miedzy pojęciami Atrybuty obiektów Usługi obiektów Komunikaty między obiektami Pojęcia są środkiem służącym do rozpoznawania: Materialne osoba, ołówek, samochód Niematerialne czas, jakość, firma Role doktor, pacjent, właściciel Opinie wydajna praca, wysoka płaca, dobry przykład Relacyjne małżeństwo, posiadanie Zdarzenia sprzedaż, zakup, załamanie rynku Inne zestaw, liczba, ikona, obraz, sygnał, proces Pojęcia pozwalają nadać znaczenie obiektom w naszym świecie. 15 16 Trójka pojęciowa: 1. Symboliczna reprezentacja, np. : nazwa, ikonka, znaczek 2. Intensja treść pojęcia, pełna definicja pojęcia 3. Ekstensja zakres pojęcia, zbiór wszystkich rzeczy i wyobrażeń abstrakcyjnych, do których stosuje się dane pojęcie. 17 Typ obiektowy opis obiektu z jednolitym zbiorem atrybutów i usług, zawierający opis tworzenia nowych obiektów w klasie Obiekty coś, do czego da się zastosować jakieś pojęcie. Obiekt jest egzemplarzem pojęcia (instancją). Struktura i zachowanie obiektu są określone przez pojęcia, które się do niego odnoszą: Pojęcie typ obiektowy Obiekt to kapsułka ze zdefiniowanymi wartościami atrybutów i wyłącznie na nich działającymi usługami. Większość obiektów istnieje tylko przez pewien okres. 18 3

Struktury - związki między typami obiektowymi Odwzorowania: np. zatrudnia przypisuje obiekt typu organizacja związanym z nim obiektom typu zatrudniony. Odwzorowania mogą być jedno- lub wielowartościowe. 1. A jest zawsze związane z jednym B 2. A jest zawsze związane z jednym lub wieloma B 3. A jest zawsze związane z żadnym lub tylko jednym B 4. A jest zawsze związane z żadnym, jednym lub wieloma B Struktury - związki między typami obiektowymi Relacje: Mogą obejmować kilka typów obiektów, np. umowa o prace jest typem związków, którego krotki są niezmiennymi parami obiektów typu osoba i organizacja 19 20 Struktury - podtypy i nadtypy obiektów: Podtyp typ obiektowy, którego zbiór wszystkich elementów zawiera się w większym zbiorze, oraz definicja jest bardziej wyspecjalizowana niż definicja innego typu Nadtyp - typ obiektowy, którego zbiór zawiera wszystkie elementy jednego lub więcej typów, oraz definicja jest ogólniejsza niż definicja innych typów Np.: organizm zwierzę ssak - pies Atrybuty dane (stan systemu), dla których każdy obiekt ma swoją własną wartość Każdy typ obiektowy jest opisany przez atrybuty. Atrybuty są szczegółowo opisane w specyfikacji obiektu. Atrybuty opisują wartości trzymane w obiekcie, aby wyłącznie usługi tego obiektu mogły nimi manipulować. Atrybuty i specjalne usługi na nich działające traktujemy jako nierozłączną całość. Jeżeli inny obiekt chce odczytać wartości w obiekcie lub działać na nich w inny sposób, musi zrobić to poprzez specyfikację powiązania odpowiadającego komunikatowi, który spowoduje realizację usługi zdefiniowanej dla tego projektu. 21 22 Definiowanie usług Usługa zdefiniowane zachowanie obiektu, które jest on zobowiązany przejawić. Usługi stosują się do atrybutów obiektu. Definiując nowe usługi wyróżniamy następujące działania: Identyfikacja stanów obiektu Identyfikacja wymaganych usług Identyfikacja powiązań odpowiadających komunikatom Specyfikacja usług Zebranie w jedną całość dokumentacji analizy Zbiór powiązanych ze sobą obiektów o pewnej funkcjonalności można nazywać systemem. Raz uruchomiony system działa obiekty oddziałują na siebie, zmieniając swój stan i tworząc nowe obiekty powiązane z tym systemem, a także usuwając już istniejące. Perpetuum mobile projekt: Leonardo da Vinci, Muzeum w Monachium, Niemcy http://www.leifiphysik.de/themenbereiche/arbeit-energie-und-leistung/geschichte 23 24 4

Stan obiektu kolekcja powiązań obiektu z innymi obiektami i typami obiektowymi w pewnym okresie czasu życie obiektu: W systemie obiekty powstają, istniejąc zmieniają wielokrotnie swój stan, oraz są usuwane Zmiana stanu jest zmianą powiązań (atrybutów i/lub związków) obiektu Istotna zmiana stanu obiektu nazywana jest zdarzeniem Rodzaje zdarzeń: tworzenie, kończenie, łączenie/rozłączanie, inne Analityk nie potrzebuje wiedzy o każdym możliwym zdarzeniu: klasyfikuje je tworząc typy zdarzeń, np. zamiast definiowania zdarzenia wczoraj mój pies ugryzł nowego listonosza w lewą nogę tworzy typ: pies ugryzł osobę Zdarzenia są historią obiektów 25 26 życie systemu: Zmienność systemu wyraża się przez procesy Procesy odczytują i zmieniają stany obiektów Operacje to jednostki przetwarzania, z których składają się procesy Każda operacja wymaga obiektów, na których może operować (jeden lub więcej) Operacje mogą zwraca nowe obiekty Operacje są też związane z typami zdarzeniowymi efektem operacji mogą być zdarzenia Ograniczenia, przy spełnieniu których operacja wykona się poprawnie, to warunki wstępne Ograniczenia jakie musza zachodzić w wyniku zakończenia operacji to warunki końcowe Operacje zegarowe: emitują zdarzenia - tyknięcia zegara Metody są izolowane od rozważań o przyczynach i skutkach, tj.: Metoda działa tak samo niezależnie od tego, jakie zdarzenie ją wywołało i jaki jest stan obiektów (wystarczy że spełniają ograniczenia) Metoda w swym działaniu nie uwzględnia tego, jakie następne metody wywoła zdarzenie jej zakończenia Można je specyfikować jako moduły zawierające różnorodne składniki: ciągi zdarzeń, wywołań i warunków sterujących; są to zagnieżdżone struktury operacji. Specyfikacja sposobu wykonania operacji to metoda 27 28 Wyzwalacz połączenie zdarzenia i wywoływanego procesu Rodzaje wyzwalaczy == reguły wyzwalania Wyzwalacz może wyzwalać wiele procesów, które mogą być wykonywane sekwencyjnie lub równolegle Reprezentowanie struktury obiektów model relacji binarnych (diagram obiektowy) wyraża związki między typami 29 30 5

Reprezentowanie zachowania obiektów Maszyny skończone: stany, przejścia między stanami (zależą od zdarzeń). Specyfikacje oparte na scenariuszach (diagramy sieci Petriego). Specyfikacje decyzyjne wyrażone za pomocą tabeli decyzyjnej i drzewa decyzyjnego. Podejścia do analizy obiektowej - historia Martin/Odell Booch Coad/Yourdon Jacobson Shlaer/Mellor Rumbaugh i in. Źródło: Podstawy metod obiektowych J. Martin, J.J. Odell, WNT, 1997 31 32 Martin/Odell Booch Coad/Yourdon Jacobson Shlaer/Mellor Rumbaugh i in. Odwzorowania: Typ obiektowy Klasa Klasa i obiekt Typ obiektowy Obiekt Klasa Obiekt Obiekt Obiekt Obiekt, Egzemplarz Egzemplarz Obiekt Typ związków Używanie relacji Związek obiektów Związek Powiązanie Odwzorowanie Rola Związek znajomości Związek, Odwzorowanie Rola Uogólnianie, Specjalizowanie Dziedziczenie Gen-Spec Dziedziczy Podtyp-Nadtyp Uogólnianie Składanie Zawieranie Część-Całość Agregacja 33 34 Analizą obiektowa wg metody Coad/Yourdon: 5 głównych czynności: 1. znajdowanie klas i obiektów 2. identyfikacja struktur 3. identyfikacja tematów 4. definiowania atrybutów 5. definiowania usług model analizy obiektowej zawiera 5 warstw: 1. warstwa tematów 2. warstwa klas i obiektów 3. warstwa struktury 4. warstwa atrybutów 5. warstwa usług Analizą obiektowa wg metody OMT (Rumbaugh): 3 części składowe modelu, pokazujące różne jego aspekty: Model Obiektów (OMT Object Model): statyczny obraz struktury modelu - klasy - atrybuty - operacje - relacje między klasami i instancjami Model Dynamiczny (OMT Dynamic Model): współdziałanie obiektów (powiązania wyznaczone przez komunikaty). Tu mieszczą się różne diagramy pokazujące przepływ sterowania, także ograniczenia i warunki na wartości atrybutów. Model Funkcyjny (OMT Functional Model) specyfikacja operacji jako funkcji przekształcających wejście na wyjście, warunki poprawności (asercje). 35 36 6

Za budowę modelu odpowiedzialni są analitycy, którzy mają kontakt z klientem Analitycy uzgadniają z inżynierami oprogramowania poprawność budowanego modelu, dostosowując go do możliwości narzędzia programistycznego, które zostanie użyte podczas fazy implementacji Rola inżyniera oprogramowania: jednocześnie znać kilka metodyk projektowania lub przynajmniej zdawać sobie sprawę z różnic, jakie między nimi występują potrafić przekładać niejasne żądania klientów na precyzyjne specyfikacje umieć rozmawiać z zamawiającym oprogramowanie posługując się Obszary wiedzy inżyniera oprogramowania Inżynieria oprogramowania, informatyka Znajomość środowiska programistycznego (język programowania, platforma systemowa, środowisko projektowe) Znajomość organizacji (przedsiębiorstw, administracji publicznej) Znajomość dziedziny aplikacji (np. awioniki, operacji bankowych, logistyki, chemii, itp.) Psychologia i socjologia (etyka, komunikatywność, gospodarowanie czasem, itp.) terminami z dziedziny aplikacji, a nie terminami informatycznymi 37 38 Podczas analizy wzajemne oddziaływania między obiektami są reprezentowane jako zdarzenia. Projektant ma za zadanie wybrać rodzaj przepływu sterowania, jaki będzie implementowany w projekcie. Zewnętrzne sterowanie: Sekwencyjne proceduralne Sekwencyjne zdarzeniowe Współbieżne Wewnętrzne sterowanie Systemy sterowane procedurami Sterowanie proceduralne umiejscowione jest w kodzie programu: zaczyna się na wierzchołku hierarchii podprogramów i przez wywołania podprogramów przechodzi do niższych poziomów, albo jeden z komponentów jest menedżerem systemu: steruje rozpoczynaniem, zatrzymywaniem i koordynacją innych 39 40 Systemy sterowane procedurami Procedury generują żądania wprowadzenia danych i czekają na ich pojawienie się. Po wprowadzeniu danej sterowanie przekazywane jest zwrotnie do procedury. Wartość licznika rozkazów, zmiennych lokalnych i stosu, na którym odkładane są wywołania procedur, definiują stan systemu. Można stosować tylko, gdy schemat zmiany stanów wykazuje regularne następstwo zdarzeń wejściowych i wyjściowych. Trudno jest stworzyć elastyczne interfejsy użytkownika. Systemy sterowane zdarzeniami Sterowanie zdarzeniowe rezyduje wewnątrz programu koordynującego lub monitorującego. Procedury aplikacji są przywiązane do zdarzeń i są wywoływane, gdy pojawiają się odpowiadające im zdarzenia, tj. podsystemy same decydują, które zdarzenia są dla nich interesujące. Odwołania do programu koordynującego pozwalają na wprowadzanie danych wejściowych oraz wysyłanie danych wyjściowych (procedury nie zachowują sterowania np. czekając na dane). 41 42 7

Sterowanie wewnętrzne Proceduralne przekazywanie sterowania (wywołania procedur, wywołania między zadaniowe) jest kontrolowane przez program i jest poza kontrolą użytkownika Zdarzeniowe wzajemne oddziaływania między obiektami są takie same jak zewnętrzne, za wyjątkiem braku oczekiwań na zdarzenia: obiekty mogą wymuszać odpowiedzi innych obiektów Sterowanie zewnętrzne Proceduralne Jest kontrolowane przez użytkownika (trudne w realizacji) Zdarzeniowe Oczekiwanie na zdarzenia, które są pod kontrolą użytkownika (dość intuicyjne) W procesie rozwoju oprogramowania: Faza analizy opisuje wymagania Faza projektu definiuje strategię rozwiązania, tj. projekt klas obiektów przez: Zdefiniowanie interfejsów Zdefiniowanie algorytmów użytych do zaimplementowania operacji Optymalizowanie struktur danych i algorytmów W fazie projektu wprowadza się również dodatkowe wewnętrzne klasy obiektów niezbędne dla implementacji 43 44 Kolejność tworzenia projektu obiektów 1. Wpisać do klas obiektów wszystkie operacje z modeli analitycznych. 2. Zaprojektować algorytmy implementujące operacje, biorąc pod uwagę złożoność obliczeniową, łatwość implementacji, zrozumiałość i elastyczność. 3. Zoptymalizować ścieżki dostępu do danych. 4. Zaimplementować sterowanie, które odwzoruje model dynamiczny (system sterowany procedurami lub zdarzeniami). 5. Zmienić strukturę klas aby rozszerzyć związki dziedziczenia. 6. Zaprojektować implementacje związków klas (nadmiarowe związki gmatwają analizę, ale na etapie implementacji mogą poprawić wydajność i uprościć realizację niektórych procesów). 7. Określić reprezentację obiektu. 8. Umieścić klasy i związki w modułach. PROGRAMOWANIE OBIEKTOWE 45 46 Programowanie obiektowe Język programowania C++ pozwala na obiektową realizację projektu systemu Język C++ jest nadzbiorem języka C (prawie..) Występują różnice między C i C++ w obszarze właściwości programowania strukturalnego, jednak program napisany wg reguł C w większości przypadków zostanie zaakceptowany przez kompilator C++. RÓŻNICE: C VS. C++ 47 48 8

Nowe symbole komentarzy: //. tu jest komentarz Możliwość mieszania instrukcji i deklaracji zmiennych w jednym bloku kodu Możliwość deklarowania zmiennych np. w instrukcji sterującej pętli for, np.: for (int i=0; i<100; i++) Nowy typ podstawowy bool. Zmienne bool przyjmują dwie wartości true i false. Ze względu na wsteczną zgodność jednak pozostawiono domyślną konwersję typu bool na int. Pisząc w C można jednak było sobie samemu zrobić typ bool : typedef enum {TRUE = 1, FALSE = 0 bool; Przekazywanie argumentów przez odniesienie (referencję): void fun(int &k) Taki zapis oznacza, że funkcji zostanie przekazane odniesienie do zmiennej. Kopia, która zostanie utworzona, będzie korzystała z podanego adresu zewnętrznej zmiennej. Przykład deklaracji: void fun(int &k){ k += 2; ; Deklaracja zmiennych strukturalnych bez słowa struct, np.: struct Struktura { int a; char c; ; Struktura X; Jak to działa? 49 50 Przekazywanie argumentów przez odniesienie (referencję): void fun(int &k) W czasie wykonania funkcji nazwa parametru k będzie tylko inną nazwą zmiennej podanej w argumencie wywołania Wywołanie: int m = 1; fun(m); spowoduje, że zmienna m po zakończeniu działania funkcji będzie miała wartość 3. Przekazywanie argumentów przez odniesienie (referencję): Uwaga: Wywołanie obydwu poniższych funkcji: void fun(int &k) void fun(int k) wygląda identycznie: fun(m); Natomiast takie wywołanie: fun(m+n); jest dozwolone tylko w przypadku funkcji: void fun(int k) 51 52 Przekazywanie argumentu przez wartość, odniesienie i wskaźnik void fun(int x, int& y, int *z) { x = 2*x; y = 3*y; *z = 4* (*z); x przekazywany przez wartość pracuje na kopii y przekazywany przez odniesienie pracuje na oryginale z przekazywany przez wskaźnik pracuje na adresie oryginału Przekazywanie tablic w argumencie wywołania funkcji void funtab1(double t[]) // nieznany rozmiar void funtab2(double (&t)[6])// znany rozmiar Wywołanie: double tab[] = { 0 ; /* tablica zer */ funtab1(tab); funtab2(tab); Wywołanie: int a=1,b=2,c=3; fun(a,b,&c); funtab1 t jest typu double*; rozmiar tablicy nie jest znany (jest dowolny) funtab2 t jest typu odniesienie do sześcioelementowej tablicy elementów typu double 53 54 9

Przekazywanie tablic w argumencie wywołania funkcji void funtab2(double (&t)[6]) / * Nawias w (&t) jest konieczny. */ double (&t)[6] double &t[6] Bez nawiasu jest to tablica odniesień do zmiennych typu double coś takiego nie istnieje w C (!). Funkcje statyczne funkcje zadeklarowane jako static, np.: static int inc(int &x) { return ++x; Funkcje te są widoczne tylko w obrębie pliku, w którym zostały zadeklarowane, w przeciwieństwie do pozostałych funkcji globalnych, które są widoczne we wszystkich plikach należących do projektu Przy używaniu operatora odniesienia podawanie wymiaru tablicy jest konieczne. Tablica czteroelementowa to nie to samo co tablica pięcioelementowa. Wywołując funtab1 możemy podać tablicę dowolnego rozmiaru. W funtab2 musi być to tablica dokładnie 6-elementowa. 55 56 Funkcje rozwijane zadeklarowane z wykorzystaniem słowa kluczowego inline, np.: inline int pow2(int x) { return x*x; W miejscach wywołania funkcji kompilator umieszcza kod funkcji zamiast jej wywołania. W ten sposób powstaje szybszy kod (jeżeli funkcja zawiera niewielki kod, to przyrost objętości programu jest minimalny, za to otrzymujemy zysk w postaci większej szybkości) Przeciążanie funkcji zadeklarowanie kilku funkcji o tej samej nazwie, ale różnym zestawie argumentów wywołania, np.: int fun(int a); int fun(double a); int fun(char a); Aby funkcję były uważane za różne, muszą różnic się sygnaturą. W skład sygnatury wchodzą: nazwa funkcji i lista typów argumentów. Typ zwracany nie należy do sygnatury. 57 58 Przeciążanie funkcji Różnienie się sygnaturą nie jest warunkiem wystarczającym, np.: void fun(int k); void fun(int &k); różnia się sygnaturą, ale to nie wystarcza, aby jednoznacznie rozstrzygnąć, którą funkcję wywołać w przypadku: int k = 0; fun(k); Dynamiczny przydział pamięci: Funkcje biblioteczne malloc, calloc, realloc i free zostają zastąpione słowami kluczowymi C++: new i delete Ogólna postać wyrażenia alokującego: new typ; gdzie typ jest typem zmiennej, która ma zostać zaalokowana na stercie, np.: new int; new char[100]; Wyrażenie new zwraca wskaźnik do nowo utworzonego obiektu dokładnie takiego typu, o jakiego przydzielenie został poproszony, np.: char *buffer = new char[100]; 59 60 10

Dynamiczny przydział pamięci: Ogólna postać wyrażenia zwalniającego: delete wskaźnik; gdzie wskaźnik przechowuje adres do zmiennej dynamicznej i jest dokładnie takiego typu, jak ten zaalokowany na stercie, np.: delete x; delete []buffer; Uwaga: jeżeli była alokowana tablica, to należy ją zwalniać używając składni właściwej dla tablic Stałe wyliczeniowe w C: umożliwiają definiowanie typów, wraz ze zmiennymi do których można przypisać wartości enum dzien {PON, WT, SR, CZW, PT, SOB, NIE; enum srodektransportu {SAMOCHOD, TRAMWAJ, AUTOBUS, ROWER, NOGI; Przykład: enum KOLOR { czerwony,zielony,niebieski; enum KOLOR ulubionykolor; ulubionykolor = czerwony; 61 62 Stałe wyliczeniowe w C++: Nie wymagane już jest pisanie słowa enum, np.: enum KOLOR ulubionykolor = czerwony; // OK. w C i C++ KOLOR nielubianykolor = seledynowy; // OK. tylko w C++ enum już nie jest tożsamy z typem int (brak konwersji), np.: ulubionykolor = 2; // OK. tylko w C Różne właściwości Funkcje tak samo jak zmienne mają swoje miejsce w pamięci, gdzie są zapisane. Można więc uzyskać ich adres. Podobnie jak adres tablicy jest zwracany przez jej nazwę, podaną bez nawiasu kwadratowego, adres funkcji uzyskuje się za pomocą nazwy funkcji pozbawionej listy argumentów. Można tworzyć tablice wskaźników do funkcji i wywoływać funkcje nie po nazwie, a po numerze w tablicy 63 64 Różne właściwości Różne właściwości Wskaźniki do funkcji - przykład: int suma (int a, int b) { return a+b; int main () { int (*wsk_suma)(int, int); // zmienna wskaźnikowa wsk_suma = suma; // przypisanie adresu funkcji do wskaźnika printf("4+5=%d\n", (*wsk_suma)(4,5)); return 0; Tablice wskaźników do funkcji - przykład: void ErrMsg() { printf("blad\n"); ; void OKMsg() { printf("ok\n"); ; void YesMsg() { printf("tak\n"); ; void NoMsg() { printf("nie\n"); ; void (*func_table[])() = {ErrMsg, OKMsg, YesMsg, NoMsg ; int main () { srand( (unsigned)time( NULL ) ); double r = rand(); int i = floor(4*r/rand_max); (*func_table[i])(); return 0; 65 66 11