Programowanie obiektowe



Podobne dokumenty
Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java - interfejs graficzny

Graphic User Interfaces pakiet Swing

Kontenery i komponenty graficzne

Java niezbędnik programisty spotkanie nr 12. Graficzny interfejs użytkownika

JAVA Materiały do laboratorium III wersja niezaawansowana Marcin Borkowski WSEiZ czerwiec 2006

Programowanie zdarzeniowe

Tworzenie elementów graficznych

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Programowanie obiektowe

Programowanie graficznych interfejsów użytkownika

Programowanie w Javie Wykład 6 Okienka w Javie (AWT)

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science

Architektura interfejsu użytkownika

Język Java część 2 (przykładowa aplikacja)

Programowanie graficznego interfejsu użytkownika. Wykład 8. Maciej Wołoszyn 10 maja 2006

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie Multimediów. Programowanie Multimediów JAVA. programowanie GUI. (AWT i Swing) [1]

Programowanie obiektowe

Dokumentacja do API Javy.

Aplikacja wielowątkowa prosty komunikator

Aplikacja wielow tkowa prosty komunikator

SWING ZAGADNIENIA: wprowadzenie, kontenery I komponenty, LayoutManager, komponenty tekstowe.

Tworzenie i obsługa graficznego interfejsu uŝytkownika

Programowanie obiektowe

Obsługa zdarzeń. Wykład 4

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Podstawowe informacje o apletach

Multimedia JAVA. Historia

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Kurs programowania. Wykład 4. Wojciech Macyna. 23 marca 2016

Podstawy Języka Java

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie obiektowe

SWING. dr Jarosław Skaruz

Wykład 4_1. Interaktywne aplety obsługa zdarzeń, uruchamianie apletu przez przeglądarkę lub maszynę wirtualną Javy.

Programowanie Obiektowe GUI

Interaktywne aplety obsługa zdarzeń, uruchamianie apletu przez przeglądarkę lub maszynę wirtualną Javy. Tworzenie łącz w apletach

Programowanie obiektowe

Klasy abstrakcyjne i interfejsy

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35

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

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Iteracyjno-rozwojowy cykl oprogramowania 4

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

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Java Swing. Tomasz Mularczyk Luty 2005

Java: interfejsy i klasy wewnętrzne

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Grafika i komunikacja człowiek komputer Laboratorium. Część 1: Wstęp do grafiki

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

Interfejsy i klasy wewnętrzne

Zaawansowane programowanie w C++ (PCP)

Laboratorium 1 - Programowanie proceduralne i obiektowe

Builder (budowniczy) Cel: Przykład:

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Java SE Laboratorium nr 5. Temat: Obsługa zdarzeń

Programowanie obiektowe

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Technologie i usługi internetowe cz. 2

Modelowanie obiektowe

Wzorce projektowe. dr inż. Marcin Pietroo

Język Java część 2 (przykładowa aplikacja)

Język programowania. Andrzej Bobyk

Diagramy klas. dr Jarosław Skaruz

Aplikacje w środowisku Java

Wprowadzenie do projektu QualitySpy

Informatyka i Ekonometria Programowanie komputerów Ćwiczenia Tworzenie aplikacji wykorzystaniem graficznego interfejsu użytkownika - Swing.

Wykład 7: Pakiety i Interfejsy

GUI - projektowanie interfejsów cz. II

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Polimorfizm. dr Jarosław Skaruz

Przykładowe roz wiązanie:

Instrukcja laboratoryjna nr.4

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

Programowanie zdarzeniowe

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

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Technologie obiektowe

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Temat 4. Storyboard i element interfejsu użytkownika Gra w kulki- część 1

LABORATORIUM 7 Cel: 1_1

Programowanie obiektowe

Aplikacje w środowisku Java

Scenariusz Lekcji. Część organizacyjna:

Instrukcja 4 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwa klienta: Interfejs graficzny użytkownika

Zaawansowane programowanie obiektowe. Wykład 3 część 2

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Zastosowanie słuchaczy zdarzeń wg

Podstawy i języki programowania

Wskazówki projektowe. Programowanie Obiektowe Mateusz Cicheński

Wywoływanie metod zdalnych

Transkrypt:

Programowanie obiektowe Wykład 7 Marcin Młotkowski 8 kwietnia 2015

Plan wykładu Z życia programisty, część 1 1 Z życia programisty, część 1 2 3 Z życia programisty, część 2 Model View Controller MVC w u Marcin Młotkowski Programowanie obiektowe 2 / 44

Etap 1 Z życia programisty, część 1 Specyfikacja Zaprogramować system do obsługi biblioteki. Marcin Młotkowski Programowanie obiektowe 3 / 44

Z życia programisty, część 1 Fragment implementacji public class Ksiazka { private String tytuł; private String autor; private int wydanie; public Ksiazka(String t, String a, int w) { this.tytuł = t; this.autor = a; this.wydanie = w; } public String tostring() { return "Książka " + this.tytuł + " " + this.autor; } } Marcin Młotkowski Programowanie obiektowe 4 / 44

Etap 2 Z życia programisty, część 1 Rozszerzenie specyfikacji Ale żeby jeszcze dało się edytować dane w okienku! Marcin Młotkowski Programowanie obiektowe 5 / 44

Z życia programisty, część 1 Implementacja w Javie public class Ksiazka { private String tytuł; private String autor; private int wydanie; public Ksiazka(String t, String a, int w) {... } public String tostring() {... } public void Edycja() {... } } Marcin Młotkowski Programowanie obiektowe 6 / 44

Plan wykładu Z życia programisty, część 1 1 Z życia programisty, część 1 2 3 Z życia programisty, część 2 Model View Controller MVC w u Marcin Młotkowski Programowanie obiektowe 7 / 44

Z życia programisty, część 1 Wprowadzenie do biblioteki Najważniejsze informacje istotnie ulepszona wersja AWT (Abstract Window Toolkit); niezależność wyglądu i innych mechanizmów od systemu operacyjnego; wsparcie dla internacjonalizacji. Intensywnie korzysta z mechanizmów obiektowych: klas, obiektów i dziedziczenia. Marcin Młotkowski Programowanie obiektowe 8 / 44

Z życia programisty, część 1 Z czego składa się Część widoczna Okna, kontrolki i menu Obsługa kliknięć Zdarzenia i słuchacze. Marcin Młotkowski Programowanie obiektowe 9 / 44

Gdzie jest? Z życia programisty, część 1 import javax.swing.*; import java.awt.*; import java.awt.event.*; Marcin Młotkowski Programowanie obiektowe 10 / 44

Hierarchia klas Z życia programisty, część 1 javax.swing.* JComponent Frame JLabel JTextComponent JFrame JTextField Marcin Młotkowski Programowanie obiektowe 11 / 44

Z życia programisty, część 1 Szybkie rozwiązanie Marcin Młotkowski Programowanie obiektowe 12 / 44

Okno główne Z życia programisty, część 1 JFrame frame = new JFrame("Edycja książki"); frame.setdefaultcloseoperation(jframe.exit_on_close); Marcin Młotkowski Programowanie obiektowe 13 / 44

Okno główne Z życia programisty, część 1 JFrame frame = new JFrame("Edycja książki"); frame.setdefaultcloseoperation(jframe.exit_on_close); Container kontener = frame.getcontentpane(); GridLayout layout = new GridLayout(4, 2); kontener.setlayout(layout); Marcin Młotkowski Programowanie obiektowe 13 / 44

Edycja autora Z życia programisty, część 1 JLabel autor_etykieta = new JLabel("Autor"); kontener.add(autor_etykieta); JTextField autor = new JTextField(this.autor, 40); kontener.add(autor); Marcin Młotkowski Programowanie obiektowe 14 / 44

Edycja tytułu Z życia programisty, część 1 JLabel tytuł_etykieta = new JLabel("Tytuł"); kontener.add(tytuł_etykieta); JTextField tytuł = new JTextField(this.tytuł, 40); kontener.add(tytuł); Marcin Młotkowski Programowanie obiektowe 15 / 44

Edycja wydania Z życia programisty, część 1 JLabel wydanie_etykieta = new JLabel("Wydanie"); kontener.add(wydanie_etykieta); JTextField wydanie = new JTextField(Integer.toString(this.wydanie), 40); kontener.add(wydanie); Marcin Młotkowski Programowanie obiektowe 16 / 44

Z życia programisty, część 1 Przycisk zapisu danych JButton b = new JButton("Zapisz"); b.addactionlistener(this); kontener.add(b); Marcin Młotkowski Programowanie obiektowe 17 / 44

Z życia programisty, część 1 Zakończenie budowania okna edycji frame.pack(); frame.setvisible(true); Marcin Młotkowski Programowanie obiektowe 18 / 44

Z życia programisty, część 1 Reakcja na kliknięcie public class Ksiazka implements ActionListener { public void actionperformed(actionevent e) { } // np. pobranie z kontrolki wpisanych danych: JTextfield.getText(); } public void Edycja() { b.addactionlistener(this); } Marcin Młotkowski Programowanie obiektowe 19 / 44

Wynik Z życia programisty, część 1 Marcin Młotkowski Programowanie obiektowe 20 / 44

Z życia programisty, część 1 Zdarzenie Kliknięcie myszką, naciśnięcie klawisza, upłynięcie czasu, zakończenie jakiejś operacji. Kontrolka Kontrolka związana ze zdarzeniem, np. kliknięty przycisk. Obsługa zdarzenia Akcja (metoda) wykonywana po zaistnieniu zdarzenia. Marcin Młotkowski Programowanie obiektowe 21 / 44

Z życia programisty, część 1 Subskrypcja zdarzeń w u Kontrolka "przyjmująca zdarzenia" Kontrolka ma listę klas, które implementują interfejs ActionListener. Po każdym zdarzeniu wszystkie elementy listy są informowane o zaistnieniu zdarzenia. Słuchacz Implementuje metodę actionperformed(actionevent), która jest wywoływana w momencie wystąpienia zdarzenia. Marcin Młotkowski Programowanie obiektowe 22 / 44

Z życia programisty, część 1 Implementacja nasłuchu public class Ksiazka implements ActionListener { public void actionperformed(actionevent e) {... } public void Edycja() {... JButton b = new JButton("Zapisz"); b.addactionlistener(this);... } } Marcin Młotkowski Programowanie obiektowe 23 / 44

Słuchacze Z życia programisty, część 1 Obiekty mogą rejestrować Słuchaczy (dowolną ich liczbę); informacja o zmianach jest rozsyłana przez obiekt do wszystkich słuchaczy; w u Słuchacz implementuje interfejs EventListener i pochodnych, w tym ActionListener. Marcin Młotkowski Programowanie obiektowe 24 / 44

Z życia programisty, część 1 Implementacja słuchacza, 1. podejście public class Ksiazka implements ActionListener { b.addactionlistener(this); } Marcin Młotkowski Programowanie obiektowe 25 / 44

Z życia programisty, część 1 Implementacja słuchacza, 2. podejście public class Ksiazka { class MyListener implements ActionListener { public void actionperformed(actionevent e) {... } } }... b.addactionlistener(new MyListener());... Marcin Młotkowski Programowanie obiektowe 26 / 44

Z życia programisty, część 1 Implementacja słuchaczy, 3. podejście Klasa anonimowa b.actionlistener( new ActionListener() { public void actionperformed(actionevent evt) {... } } ); Marcin Młotkowski Programowanie obiektowe 27 / 44

Z życia programisty, część 1 Własności klasy anonimowej można definiować "w locie" i nie trzeba wymyślać nazwy; klasa anonimowa ma dostęp do zmiennych obiektu macierzystego. Marcin Młotkowski Programowanie obiektowe 28 / 44

Plan wykładu Z życia programisty, część 1 Z życia programisty, część 2 Model View Controller MVC w u 1 Z życia programisty, część 1 2 3 Z życia programisty, część 2 Model View Controller MVC w u Marcin Młotkowski Programowanie obiektowe 29 / 44

Z życia programisty, część 1 Rozwój oprogramowania Z życia programisty, część 2 Model View Controller MVC w u Ale żeby działało na komórce/palmtopie/... Marcin Młotkowski Programowanie obiektowe 30 / 44

Z życia programisty, część 1 Rozwój oprogramowania Z życia programisty, część 2 Model View Controller MVC w u Ale żeby działało na komórce/palmtopie/... Implementacja public class Ksiazka { public void Edycja() {... } public void EdycjaWersjaKomórkowa() {... } public void EdycjaWersjaPalmtop() {... } } Marcin Młotkowski Programowanie obiektowe 30 / 44

Wynik Z życia programisty, część 1 Z życia programisty, część 2 Model View Controller MVC w u implementacja "właściwej" klasy Książka: 15 wierszy; implementacja edycji (tylko ): 40 wierszy Marcin Młotkowski Programowanie obiektowe 31 / 44

Refleksja Z życia programisty, część 1 Z życia programisty, część 2 Model View Controller MVC w u Czy klasa Ksiazka ma dobrą nazwę? Marcin Młotkowski Programowanie obiektowe 32 / 44

Z życia programisty, część 1 Co jest w środku klasy Ksiazka? Z życia programisty, część 2 Model View Controller MVC w u implementacja funkcjonalności związanej z modelowaniem książki kod odpowiedzialny za interakcję ze środowiskiem okienkowym Marcin Młotkowski Programowanie obiektowe 33 / 44

Z życia programisty, część 1 Z życia programisty, część 2 Model View Controller MVC w u Reguła programowania obiektowego Zasada pojedynczej odpowiedzialności Klasa powinna mieć wyłącznie jeden obszar odpowiedzialności. Marcin Młotkowski Programowanie obiektowe 34 / 44

Wprowadzenie Z życia programisty, część 1 Z życia programisty, część 2 Model View Controller MVC w u Wzorzec projektowy MVC: Model View Controller jeden z pierwszych wzorców projektowych zaprojektowany dla biblioteki graficznej Marcin Młotkowski Programowanie obiektowe 35 / 44

Z życia programisty, część 1 Interakcja z otoczeniem Z życia programisty, część 2 Model View Controller MVC w u Edycja książki Książka - autor: String - tytuł: String - wydanie: int Marcin Młotkowski Programowanie obiektowe 36 / 44

MVC Z życia programisty, część 1 Z życia programisty, część 2 Model View Controller MVC w u Model Dane oraz zależności między nimi View Widok danych (ekran, drukarka, html) Controller "Coś" co modyfikuje stan Modelu (np. przyciski na ekranie). Marcin Młotkowski Programowanie obiektowe 37 / 44

Z życia programisty, część 1 Współdziałanie elementów Z życia programisty, część 2 Model View Controller MVC w u Kontroler ma referencję do Modelu i na podstawie akcji użytkownika (naciśnięcie klawisza) wywołuje odpowiednie metody modyfikujące stan Modelu. Widok (lub Widoki) nasłuchują zmian w Modelu i aktualizują wygląd w przypadku modyfikacji. Marcin Młotkowski Programowanie obiektowe 38 / 44

MVC w u Z życia programisty, część 1 Z życia programisty, część 2 Model View Controller MVC w u Edycja książki Książka - autor: String - tytuł: String - wydanie: int Marcin Młotkowski Programowanie obiektowe 39 / 44

Ulepszanie kodu Z życia programisty, część 1 Z życia programisty, część 2 Model View Controller MVC w u Rozdzielenie klasy na dwie klasy: public class Ksiazka {... } public class KsiazkaWidok { public KsiazkaWidok(Ksiazka k) {... } } Marcin Młotkowski Programowanie obiektowe 40 / 44

Podsumowanie Z życia programisty, część 1 Z życia programisty, część 2 Model View Controller MVC w u Rozdzielenie klas względem odpowiedzialności daje naturalny podział kodu; zastosowanie wzorca MVC lub podobnego daje możliwość niezależnej implementacji klas modelu i skojarzonych z nimi interfejsów graficznych; definiowanie podklasy modelu może naturalnie być odzwierciedlone w podklasie interfejsu. Marcin Młotkowski Programowanie obiektowe 41 / 44

Z życia programisty, część 1 Z życia programisty, część 2 Model View Controller MVC w u Ocena dotychczasowego rozwiązania rozdzielono obiekt od jego "edytora"; uruchomienie edytora wymaga przesłania danych z obiektu (modelu) do edytora; zakończenie pracy edytora wymaga przesłania poprawionych danych z edytora do obiektu. Marcin Młotkowski Programowanie obiektowe 42 / 44

Z życia programisty, część 1 Marzenie programisty Z życia programisty, część 2 Model View Controller MVC w u Powiązanie kontrolek (takich jak JTextField) bezpośrednio z danymi. Marcin Młotkowski Programowanie obiektowe 43 / 44

Z życia programisty, część 1 Rozwiązanie w u Z życia programisty, część 2 Model View Controller MVC w u Koncepcja dokumentu: dokument jest kontenerem na tekst; zarówno na prosty tekst jak i na ustrukturalizowane dokumenty (html, xml) dokumenty można podłączać jako obserwatory do kontrolek, wtedy transfer danych z kontrolki do dokumentu jest automatyczny; dalsze informacje: javax.swing.text.abstractdocument i podklasy. Marcin Młotkowski Programowanie obiektowe 44 / 44