Inżynieria oprogramowania Wzorzec architekt. MVC

Slides:



Advertisements
Podobne prezentacje
Klasa listy jednokierunkowej Przekazywanie parametrów do funkcji
Advertisements

Dziedziczenie. Po co nam dziedziczenie? class osoba { char * imie, char * imie, * nazwisko; * nazwisko;public: void wypisz_imie(); void wypisz_imie();
Bezpieczeństwo wyjątków w C++: OpenGL
argumenty wiersza poleceń: getopt
Dziel – Rządź - Złącz.
Model – View - Controler
DZIEDZICZENIE · klasy bazowe i klasy pochodne WyświetlAutora( ) Autor
Zachodniopomorskie Centrum Edukacyjne Zadanie domowe.
#include #include main () { cout
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Model – View – View Model
Wzorce projektowe Jacek Matulewski
Programowanie strukturalne i obiektowe C++ Przeładowanie operatorów Robert Nowak.
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
Obiektowe metody projektowania systemów Adapter. Wstęp: „Dostosowanie interfejsu klasy do interfejsu, którego oczekuje użytkownik. Adapter umożliwia współprace.
Paweł Starzyk Obiektowe metody projektowania systemów
Wzorce Projektowe w JAVA
Zastosowanie multimediów w edukacji z zakresu bezpieczeństwa i higieny pracy Centralny Instytut Ochrony Pracy Państwowy Instytut Badawczy dr inż. Małgorzata.
Plan Czym się zajmiemy: 1.Bilans przepływów międzygałęziowych 2.Model Leontiefa.
Czy wiesz, że?... INTERNET …TO JEST SPIS TREŚCI NIEBEZPIECZEŃSTWO SPOŁECZNOŚĆ INTERNETOWA DZIECKO W INTERNECIE ZAUFANE STRONY INTERNETOWE WIRUSY.
Tworzenie odwołania zewnętrznego (łącza) do zakresu komórek w innym skoroszycie Możliwości efektywnego stosowania odwołań zewnętrznych Odwołania zewnętrzne.
TAJEMNICE DRZEW Szkoła z klasą 2.0. Realizację programu rozpoczęliśmy od wyjaśnienia pojęcia TIK TIK czyli technologie informacyjno- - komunikacyjne to.
Martyna Furtak kl. 1 TT. Według art. 3 ustawy z dnia 22 czerwca 2001 r. o organizmach genetycznie zmodyfikowanych GMO to organizm inny niż organizm człowieka,
Przemiany energii w ruchu harmonicznym. Rezonans mechaniczny Wyk. Agata Niezgoda Projekt współfinansowany przez Unię Europejską w ramach Europejskiego.
Katarzyna Olech.  POJĘCIE POLA ELEKTRYCZNEGO  WPŁYW POLA ELEKTRYCZNEGO NA KOMÓRKI  ODDZIAŁYWANIE NA CZŁOWIEKA  OBJAWY  NORMY BEZPIECZEŃSTWA  MAKSYMALNE.
TECHNIKI SZYBKIEGO CZYTANIA ZAPAMIĘTYWANIA, SKUTECZNEGO UCZENIA SIĘ.
Kwantowy opis atomu wodoru Łukasz Palej Wydział Górnictwa i Geoinżynierii Kierunek Górnictwo i Geologia Kraków, r
Opracowała: Natalia Starzyk. „Jadwiga jest w sercu Polski. A Polska na ka ż dym etapie swoich dziejów musi stwierdzi ć, Ż e by ł a i jest sob ą W znacznej.
Woda to jeden z najważniejszych składników pokarmowych potrzebnych do życia. Woda w organizmach roślinnych i zwierzęcych stanowi średnio 80% ciężaru.
Wzorce projektowe w C++ WWW: Jacek Matulewski Instytut Fizyki, UMK WWW:
Materiały pochodzą z Platformy Edukacyjnej Portalu Wszelkie treści i zasoby edukacyjne publikowane na łamach Portalu
Zjawisko fotoelektryczne zewnętrzne i wewnętrzne
Dobre praktyki w projektowaniu aplikacji mobilnych Arkadiusz Waśniewski
Marek Kozłowski Ekosystem PBN. Wprowadzenie Polska Bibliografia Naukowa to portal Ministerstwa Nauki i Szkolnictwa Wyższego gromadzący informacje dotyczące.
Wykorzystanie zasad optyki w naszym ż yciu. Dzięki zasadą optyki człowiek stworzył tak niezbędne każdej współczesnej kobiecie lustra.
Izolatory i metale – teoria pasmowa ciał stałych
Inżynieria oprogramowania Wzorce konstrukcyjne WWW: Jacek Matulewski Instytut Fizyki, UMK.
API jądra do obsługi przestrzeni użytkownika Co jest tematem tej prezentacji: Transport danych pomiędzy przestrzeniami użytkownika i jądra (asm/uaccess.h)
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Dlaczego wybraliśmy zasilacz?  Chcieliśmy wykonać urządzenia, które będzie pamiątką po naszym pobycie w gimnazjum i będzie użyteczne.  Po zastanowieniu.
O PARADOKSIE BRAESSA Zbigniew Świtalski Paweł Skałecki Wydział Matematyki, Informatyki i Ekonometrii Uniwersytet Zielonogórski Zakopane 2016.
Dziedziczenie, polimorfizm, Interfejsy
Wzorzec MVC na przykładzie CakePHP
Zarządzanie ograniczeniami
Systemy eksperckie i sztuczna inteligencja
Wytwarzanie oprogramowania sterowane przypadkami testowymi
Podstawowe polecenia systemu
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Akademia C# lab. 9 Zdarzenia i delegaty.
Przetwarzanie języka Wprowadzenie do informatyki Jerzy Nawrocki
Programowanie obiektowe Wykład 10
Programowanie obiektowe
Projekt biblioteczny klasy 4A, Pod przewodnictwem Katarzyny Latarnik
Kurs języka C++ – wykład 13 ( )
Inżynieria Oprogramowania Laboratorium
Inżynieria oprogramowania UML
ZAWODOWCY Konkurs pt.”Zawodowcy” realizowany w ramach programu z zakresu doradztwa zawodowego w SP nr 370 w Warszawie.
INSTRUKCJA.
SYSTEM KONTROLI FREKWENCJI
Podstawy informatyki Zygfryd Głowacz.
Zmienne i typy danych w C#
CZYNNIK LUDZKI JAKO POTENCJALNE ŹRÓDŁO ZAGROŻEŃ W SYSTEMIE OCHRONY INFORMACJI NIEJAWNYCH OPRACOWAŁ: ppłk mgr inż. Janusz PARCZEWSKI, tel
Wytrzymałość materiałów
Iteracyjno-rozwojowy cykl oprogramowania 2
Zdarzenia (eventy) Zdarzenia służą do powiadomienia użytkownika, gdy w używanej klasie dojdzie do pewnych wydarzeń zdefiniowanych przez twórcę klasy.
Instrukcja.
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Autor: Magdalena Linowiecka
Instrukcja podpięć przedmiotów w USOSie
Zapis prezentacji:

Inżynieria oprogramowania Wzorzec architekt. MVC Jacek Matulewski Instytut Fizyki, UMK WWW: http://www.fizyka.umk.pl/~jacek E-mail: jacek@fizyka.umk.pl Inżynieria oprogramowania Wzorzec architekt. MVC WWW: http://www.fizyka.umk.pl/~jacek/dydaktyka/inzynieria/index.html semestr letni 2016

Główna lektura 1 Głównym materiałem źródłowym jest książka tzw. gangu czworga pt. „Wzorce projektowe”.

Główna lektura 1 Głównym materiałem źródłowym jest książka tzw. gangu czworga pt. „Wzorce projektowe”.

Główna lektura 2 Dodatkowo wykorzystamy adaptacje do C# wzorców G4 opisane w książce S. J. Metskera

Inspiracja Christopher Alexander – architekt, teoretyk architektura zorientowana na człowieka np. kształtowanie przestrzeni

Inspiracja Władimir Propp, Joseph Cambell – konstrukcja opowieści (mit/bajka/powieść/film) „Wyprawa Bohatera” – zbiór stałych elementów (typy bohaterów) i budowy fabuły (etapy) Christopher Vogler – „Podróż autora”, poradnik

Przykładowy projekt: „Labirynt” Aplikacja konsolowa zaprojektowana zgodnie ze wzorcem architektonicznym MVC, czyli Model-View-Controler Model – dane i logika labiryntu Widok – moduł rysujący labirynt w konsoli Kontroler – przyjmuje wejście z klawiatury, modyfikuje model Model Widok Kontroler aktualizuje modyfikuje Użytkownik używa jest oglądany

Architektura MVC Kontrola oraz przepływ informacji między modułami aplikacji w architekturze MVC Model Widok Kontroler aktualizuje modyfikuje Użytkownik używa jest oglądany

Architektura MVC Jest wiele wersji samego MVC (+ MVP) My zaimplementujemy wersję z pasywnymi modelem i widokiem (passive) oraz nadzorującym kontrolerem (supervising) lepiej pasujący do konsoli (bez zdarzeń) Kontrolera zredukujemy do funkcji main Model Widok Kontroler aktualizuje modyfikuje Użytkownik używa jest oglądany

Przykładowy projekt: „Labirynt”

Model (klasa Labirynt) Pasywny model przechowujący stan aplikacji VC++: Solution Explorer, View Class Diagram

Model (klasa Labirynt) Klasy modelu (C++) class MiejsceWLabiryncie { public: virtual RezultatPróbyWejścia SpróbujWejść() = 0; virtual int Wejdź(int indeksBieżącejKomórki) { return -1; } virtual bool Otwórz() { return false; } }; class Komórka : public MiejsceWLabiryncie { ... enum RezultatPróbyWejścia { Nieokreślony = 0, Powodzenie, NieMożnaWejść, Zamknięte }; enum Kierunek { Północ = 0, Południe = 1, Wschód = 2, Zachód = 3 }; enum StanGry { Niezakończona = 0, Śmierć, Wygrana };

Model (klasa Labirynt) Klasy modelu (C++) class Komórka : public MiejsceWLabiryncie { private: int indeks; MiejsceWLabiryncie* sąsiednieMiejsca[4]; public: Komórka(int indeks); MiejsceWLabiryncie* PobierzMiejscePoStronie(Kierunek kierunek) const; void PowiążZMiejscem(Kierunek kierunek, MiejsceWLabiryncie* miejsce); virtual RezultatPróbyWejścia SpróbujWejść(); virtual int Wejdź(int indeksBieżącejKomórki); int PobierzIndeks(); bool OtwórzDrzwi(Kierunek kierunek); bool OtwórzDrzwi(); };

Model (klasa Labirynt) Klasy modelu (C++) class Labirynt { private: int liczbaKomórek; PKomórka* komórki; int indeksBieżącejKomórki, indeksCelu; StanGry stanGry = Niezakończona; public: Labirynt(int liczbaKomórek, int indeksPoczątkowejKomórki, int indeksCelu); ~Labirynt(); void DodajKomórkę(int indeks, Komórka* komórka); Komórka* PobierzBieżącąKomórkę(); RezultatPróbyWejścia PrzejdźWKierunku(Kierunek kierunek); void Zakończ(); StanGry PobierzStanGry(); };

Widok (klasa Widok) Klasa widoku (zbiór funkcji bez własnego stanu) #pragma once #include "Model.h" class Widok { private: Labirynt* model; public: Widok(Labirynt* model); static void WyświetlInformacjęOKomórce(Komórka* komórka); void WyświetlInformacjęOBieżącejKomórce() const; static void WyświetlInformacjęOPróbiePrzejściaWKierunku(Kierunek kierunek); void WyświetlInformacjęORezultaciePróbyPrzejścia(RezultatPróbyWejścia) const; void WyświetlInformacjęOPróbieOtwarciaDrzwi() const; void WyświetlInformacjęORezultaciePróbyOtwarciaDrzwi(bool wynik) const; void WyświetlInformacjęOStanieGry() const; };

Kontroler (funkcja main) #pragma once #include "Model.h" #include "Widok.h" class Kontroler { protected: Labirynt* model; Widok* widok; void SpróbujPrzejść(Kierunek kierunek); void SpróbujOtworzyćDrzwi(); public: Kontroler(void); ~Kontroler(void); void Uruchom(); };

Funkcja main Funkcja main widzi tylko kontroler. Kontroler tworzy instancje modelu i widoku: #include "Kontroler.h" int main(int argc, char* argv[]) { Kontroler kontroler; kontroler.Uruchom(); return 0; }

Przykładowy projekt: „Labirynt” Piszemy kod C#…

Przykładowy projekt: „Labirynt” Zadania domowe / dwa konkursy (1-3, 4): Do widoku dodać funkcję rysującą bieżącą komórkę (ściany np. za pomocą znaków *) Przygotować alternatywny widok pokazujący całą mapę z bieżącą komórką oznaczoną # Przygotować zestaw testów jednostkowych dla modelu i widoku (100% pokrycia) Przygotować alternatywny widok korzystający z OpenGL (konkurs)