Programowanie obiektowe i zdarzeniowe wykład 1 Wprowadzenie do programowania zdarzeniowego



Podobne dokumenty
1. Wprowadzenie do WPF i XAML. Tworzenie interfejsu użytkownika.

Programowanie obiektowe i zdarzeniowe

Instrukcja laboratoryjna cz.3

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

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

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

Przewodnik krok po kroku:

xmlns:prism= c. <ContentControl prism:regionmanager.regionname="mainregion" />

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

WPF 4.5 : księga eksperta / Adam Nathan. Gliwice, cop Spis treści

Jarosław Kuchta Podstawy Programowania Obiektowego. Podstawy grafiki obiektowej

Laboratorium 1 - Programowanie proceduralne i obiektowe

Programowanie obiektowe

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

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Rozdział 4 KLASY, OBIEKTY, METODY

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

MVVM i XAML w Visual Studio 2015 / Jacek Matulewski. Gliwice, cop Spis treści

1. Przypisy, indeks i spisy.

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

Prosta książka telefoniczna z wykorzystaniem zapisu do pliku

Rozwój aplikacji modułowych Paweł Brudnicki. Dodanie modułu

Visual Studio instalacja

Jarosław Kuchta. Podstawy Programowania Obiektowego. ćwiczenie 10. Podstawy grafiki w WPF

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

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

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

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Technologie obiektowe

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Języki i paradygmaty programowania

using System;... using System.Threading;

Informatyka I. Interfejs GUI wysokiego poziomu. Biblioteka Swing. Programowanie zdarzeniowe. Politechnika Warszawska Wydział Transportu 2018

Microsoft Visual C : praktyczne przykłady / Mariusz Owczarek. Gliwice, cop Spis treści

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Mechanizm dziedziczenia

Wykład 5: Klasy cz. 3

Programowanie obiektowe

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Podstawowe elementy GUI cz. 2 i 3 - zadania

Windows Phone XML WG MICROSOFT GUI. Schemat w dokumencie. Schemat w pliku zewnętrznym. Visual Studio: Properties pliku xml-owego

Podstawy programowania. Wprowadzenie

Język programowania. Andrzej Bobyk

Opis. Wykład: 30 Laboratorium: 30

Listy powiązane zorientowane obiektowo

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Laboratorium programowania urządzeń mobilnych

Programowanie obiektowe

Informatyka II. Laboratorium Aplikacja okienkowa

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

Aplikacje mobilne. Pliki zasobów, grafiki, menu, podpinanie zdarzeń. dr Tomasz Jach Instytut Informatyki, Uniwersytet Śląski

Inżynieria Programowania Laboratorium 6 Pierwsza finalna wersja. Paweł Paduch paduch@tu.kielce.pl

Programowanie obiektowe

Programowanie obiektowe i zdarzeniowe wykład 3 Okna i kontrolki

Podstawy algorytmiki i programowania - wykład 4 C-struktury

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

Dynamiczne i wydajne tworzenie interfejsu. Piotr Michałkiewicz

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

To sposób w jaki użytkownik wchodzi w interakcje z systemem. Środowisko graficzne używa kombinacji graficznych elementów(przyciski, okna, menu) i

Wykład 6 Dziedziczenie cd., pliki

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Zacznij Tu! Poznaj Microsoft Visual Basic. Michael Halvorson. Przekład: Joanna Zatorska

5-6. Struktura dokumentu html. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

Rozdział 3. Zapisywanie stanu aplikacji w ustawieniach lokalnych

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Programowanie systemów informatycznych laboratorium. Ćw. 3: Akwizycja danych. RS 232 cd.

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

Programowanie w technologii.net wykład 4 Aplikacja i okna

Podstawy Programowania Obiektowego

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI

Kompleksowe tworzenie aplikacji klasy Desktop z wykorzystaniem SWT i

Pola i metody statyczne

Programowanie aplikacji okienkowych Windows

INFORMATYKA MÓJ SPOSÓB NA POZNANIE I OPISANIE ŚWIATA PROGRAM NAUCZANIA INFORMATYKI Z ELEMENTAMI PRZEDMIOTÓW MATEMATYCZNO-PRZYRODNICZYCH

C# /.NET. Copyright by 3bird Projects 2018,

Silverlight. Od podstaw

Programowanie Obiektowe GUI

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Zaliczenie przedmiotu:

Aby nadać jej pożądaną postać należy w pliku Window1.xaml stworzyć definicję swojego stylu modyfikując ręcznie postać zapisu XAML:

Dokumentacja do API Javy.

Podstawy Programowania

Programowanie komputerowe. Zajęcia 7

Wykład 8: klasy cz. 4

Programowanie obiektowe

Tworzenie szablonów użytkownika

dr inż. Jarosław Forenc

XAML Extensible Application Markup Language

Wykład 10 Kolekcje, pliki tekstowe, c.d. Przykład: Notatnik

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Zakres treści Czas. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

SL: warstwy aplikacji. Wykład 4 Silverlight

Format HTML. Wybrane działy Informatyki Stosowanej. Definicja i przeznaczenie Struktura dokumentu Znaczniki Formularze i komponenty

Wykład 5 Okna MDI i SDI, dziedziczenie

Rys. 3. Kod elementów na stronie po dodaniu kontrolek podstawowych.

Języki i metody programowania Java Lab2 podejście obiektowe

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Transkrypt:

Programowanie obiektowe i zdarzeniowe wykład 1 Wprowadzenie do programowania zdarzeniowego 1/34 Wymagania wstępne: Znajomość podstaw programowania. Efekty kształcenia: Umiejętność tworzenia prostych aplikacji okienkowych w środowisku Microsoft Visual Studio, wykorzystujących techniki programowania obiektowego w języku C#. Treści kształcenia: 1. Wprowadzenie do WPF. Tworzenie interfejsu użytkownika. 2. Pojecie klasy i obiektu. Składniki klas pola i metody. Konstruktory. 3. Okna dialogowe i kontrolki zawartości. Wiązanie danych. 4. Kompozycja. Kolekcje. Kontrolki list. 5. Dziedziczenie. 6. Polimorfizm. 7. Wyjątki. Style. 8. Grafika i animacja w WPF. Oprogramowanie: Microsoft Visual Studio 2008 lub nowsze (może być w wersji Express) wraz z dostępnym w nim systemem pomocy (MSDN). Dodatkowa literatura: 1. Adam Boduch, Wstęp do programowania w języku C#, Helion 2. Krzysztof Rychlicki-Kicior, Tworzenie aplikacji graficznych w.net 3.0, Helion 3. Matthew MacDonald, Pro WPF in C# 2008: Windows Presentation Foundation with.net 3.5

2/34 Co to jest programowanie obiektowe? Co to jest programowanie zdarzeniowe? Typowa aplikacja konsolowa (w C): #include "stdio.h" int main() { int a, b, c; printf("podaj pierwszą liczbę: "); scanf("%d", &a); printf("podaj drugą liczbę: "); scanf("%d", &b); c = a + b; printf("suma = %d", c); return 0; }

3/34 Co to jest programowanie obiektowe? Co to jest programowanie zdarzeniowe? Typowa aplikacja konsolowa (w C++): #include "iostream" using namespace std; int main() { int a, b, c; cout << "Podaj pierwszą liczbę: "; cin >> a; cout << "Podaj drugą liczbę: "; cin >> b; c = a + b; cout << "Suma = " << c; return 0; }

4/34 Co to jest programowanie obiektowe? Co to jest programowanie zdarzeniowe? Typowa aplikacja konsolowa (w C#): using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int a, b, c; Console.Write("Podaj pierwszą liczbę: "); a = int.parse(console.readline()); Console.Write("Podaj drugą liczbę: "); b = int.parse(console.readline()); c = a + b; Console.Write("Suma = {0}", c); Console.ReadKey(); } } }

5/34 Jak powinna wyglądać aplikacja okienkowa? Krok pierwszy tworzenie interfejsu użytkownika (wizualne lub w kodzie).

Jak powinna wyglądać aplikacja okienkowa? Krok drugi obsługa zdarzeń. (chcemy, aby akcja użytkownika spowodowała wykonanie naszego kodu) void Oblicz(...) {......... } 6/34

Jak powinna wyglądać aplikacja okienkowa? Krok trzeci interakcja z kontrolkami. (chcemy odczytać wprowadzone przez użytkownika dane, wykonać obliczenia i wyświetlić wynik) void Oblicz(...) {......... } 7/34

8/34 Dlaczego programowanie obiektowe? Jest bliższe postrzeganiu świata przez człowieka, który najpierw dostrzega pewne rzeczy, pojęcia (obiekty), a nie wykonywane przez nie czynności (funkcje). W programowaniu obiektowym, program to zbiór obiektów posiadających określone cechy (właściwości). Mogą one wchodzić między sobą w interakcje lub łączyć się w bardziej złożone struktury. Obiekt to serwer usług może wykonać pewną operację, jeśli zostanie poproszony. Taka usługa nazywa się metodą obiektu. W aplikacji okienkowej obiektami są np. elementy, z których składamy interfejs użytkownika okno, pola tekstowe, przyciski, etc. Język C# (C Sharp): Prosty, nowoczesny, uniwersalny, język zorientowany obiektowo. Zaprojektowany przez Microsoft, powiązany z platformą.net. Programy w nim napisane wymagają środowiska uruchomieniowego (takiego jak.net lub Mono).

9/34 WPF Windows Presentation Foundation Interfejs programowania aplikacji okienkowych w systemie Windows. Wykorzystuje DirectX do rysowania okien i zawartości. Niezależność od rozdzielczości (oparcie się na jednostkach logicznych =1/96 cala) umożliwia łatwe skalowanie i dopasowanie do rozdzielczości ekranu. Ułożenie kontrolek: dynamiczne, oparte na zawartości (dopasowują się do swojej zawartości oraz dostępnego miejsca). Obiektowy model rysowania oparty na grafice wektorowej. Wsparcie dla mediów i grafiki 3D. Deklaratywne tworzenie animacji. Style i szablony pozwalają dopasowywać formatowanie i sposób renderowania elementów interfejsu. Deklaratywne *) tworzenie interfejsu użytkownika (XAML) pozwala oddzielić wygląd interfejsu od kodu. *) Deklaratywne czyli nie opisujemy kroków prowadzących do rozwiązania (algorytmu), a jedynie samo rozwiązanie. Nie mówmy jak ma być coś zrobione, ale co ma być zrobione.

10/34 XAML Extensible Application Markup Language oparty na XMLu *) (deklaratywny) język do tworzenia interfejsu definiuje ułożenie (oraz inne cechy) kontrolek w oknie pozwala na podział pracy pomiędzy programistów i grafików (twórców interfejsu) XAML nie jest obowiązkowy to samo można zrobić w kodzie, ale wymaga to większego nakładu pracy można korzystać z narzędzi wizualnych do generowania plików XAML (np. Microsoft Expression Blend) warto znać XAMLa aby móc w pełni wykorzystywać możliwości WPFa *) XML uniwersalny język znaczników do strukturalnego reprezentowania danych

11/34

12/34 XML wprowadzenie prawidłowy plik XML <!-- komentarz --> <lista> znacznik otwierający <osoba> Kowalski </osoba> <osoba imię="piotr" nazwisko="nowak"> <telefon numer="0123456789"/> </osoba> </lista> znacznik zamykający atrybuty znacznik pusty

13/34 XML wprowadzenie nieprawidłowy plik XML <lista> <osoba>nowak</osoba> <osoba> <adres> </osoba> </adres> </lista> <osoba> Kowalski </osoba>

14/34 XAML każdy znacznik odpowiada określonemu elementowi interfejsu możliwe jest zagnieżdżanie używane do określenia zawierania np. jednych elementów w innych ustawianie właściwości przez atrybuty <Window... Title="Okienko" Height="200" Width="300" FontSize="14"> <Grid> <Button Margin="30"> Nie dotykać </Button> </Grid>

15/34 Element <Window> okno aplikacji <Window... Title="Okienko" Height="200" Width="300" FontSize="14"> <Grid> <Button Margin="30"> Nie dotykać </Button> </Grid> Przykładowe atrybuty okna: Title tekst na pasku tytułowym Height wysokość Width szerokość FontSize rozmiar czcionki używanej przez wszystkie kontrolki w oknie

16/34 Układy zawartości <Window... Title="Okienko" Height="200" Width="300" FontSize="14"> <Grid> <Button Margin="30"> Nie dotykać </Button> </Grid> Okno może zawierać tylko jeden element. Aby umieścić ich więcej musimy wykorzystać specjalny element, który posłuży za kontener dla innych kontrolek. jest on odpowiedzialny za ułożenie kontrolek w oknie dba o dopasowanie kontrolek do zawartości oraz do dostępnego miejsca elementy nie powinny mieć ustalonego rozmiaru nie powinny mieć ustalonego położenia (współrzędnych) o te aspekty będzie dbał kontener różne rodzaje (typy) kontenerów będą kierować się różną logiką rozmieszczania elementów

17/34 <StackPanel> <Window...> <StackPanel> <Button>jeden</Button> <Button>dwa</Button> <Button>trzy</Button> <Button>cztery</Button> </StackPanel>

18/34 <StackPanel> <Window...> <StackPanel Orientation="Horizontal"> <Button>jeden</Button> <Button>dwa</Button> <Button>trzy</Button> <Button>cztery</Button> </StackPanel>

19/34 Przy pomocy atrybutów możemy sterować ułożeniem kontrolek: <Window...> <StackPanel Orientation="Horizontal"> <Button VerticalAlignment="Top">jeden</Button> <Button VerticalAlignment="Center">dwa</Button> <Button VerticalAlignment="Bottom">trzy</Button> <Button VerticalAlignment="Stretch">cztery</Button> </StackPanel> VerticalAlignment HorizontalAlignment

20/34 Margin dodaje odstęp od krawędzi kontenera i sąsiednich elementów: <Window...> <StackPanel> <Button HorizontalAlignment="Left" Margin="5"> jeden</button> <Button HorizontalAlignment="Right" Margin="5"> dwa</button> <Button Margin="5">trzy</Button> <Button Margin="15, 5">cztery</Button> <Button Margin="30, 5, 15, 0">pięć</Button> </StackPanel> marginesy sąsiadujących kontrolek sumują się!

21/34 Podobnie sterujemy ułożeniem zawartości wewnątrz kontrolki: <Window...> <StackPanel> <Button HorizontalContentAlignment="Left"> jeden</button> <Button HorizontalContentAlignment="Right"> dwa</button> <Button HorizontalContentAlignment="Center"> trzy</button> <Button>cztery</Button> </StackPanel> VerticalContentAlignment HorizontalContentAlignment

22/34 Podobnie sterujemy ułożeniem zawartości wewnątrz kontrolki: <Window...> <StackPanel> <Button HorizontalAlignment="Center"> jeden</button> <Button HorizontalAlignment="Center" Padding="5"> dwa</button> <Button HorizontalAlignment="Center" Padding="15, 5"> trzy</button> <Button HorizontalAlignment="Center" Padding="30, 0, 15, 5">cztery</Button> </StackPanel> Padding steruje odstępem od zawartości kontrolki

23/34 <WrapPanel> <Window...> <WrapPanel> <Button Margin="5">jeden</Button> <Button Margin="5">dwa</Button> <Button Margin="5">trzy</Button> <Button Margin="5">cztery</Button> <Button Margin="5">pięć</Button> <Button Margin="5">sześć</Button> </WrapPanel>

24/34 <DockPanel> dołączone <Window...> właściwości <DockPanel> <Button DockPanel.Dock="Top">jeden</Button> <Button DockPanel.Dock="Left">dwa</Button> <Button DockPanel.Dock="Right">trzy</Button> <Button DockPanel.Dock="Bottom">cztery</Button> <Button DockPanel.Dock="Top">pięć</Button> <Button DockPanel.Dock="Right">sześć</Button> <Button>siedem</Button> </DockPanel> kolejność elementów ma znaczenie!

<Grid> <Window...> <Grid ShowGridLines="True"> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions>......... </Grid> elementy umieszczamy w polach siatki krok pierwszy zdefiniowanie siatki tylko do testu 25/34

26/34 <Grid> <Window...> <Grid> <Grid.RowDefinitions>...</Grid.RowDefinitions> <Grid.ColumnDefinitions>...</Grid.ColumnDefinitions> <Button>jeden</Button> <Button Grid.Row="1">dwa</Button> <Button Grid.Column="2">trzy</Button> <Button Grid.Row="1" Grid.Column="1">cztery</Button> </Grid> krok drugi rozmieszczenie elementów

27/34 <Grid> <Window...> <Grid> <Grid.RowDefinitions>...</Grid.RowDefinitions> <Grid.ColumnDefinitions>...</Grid.ColumnDefinitions> <Button Grid.ColumnSpan="2">jeden</Button> <Button Grid.Row="1">dwa</Button> <Button Grid.Column="2" Grid.RowSpan="2">trzy</Button> <Button Grid.Row="1" Grid.Column="1">cztery</Button> </Grid> element może rozciągać się na więcej niż jedno pole siatki

28/34 <Grid> <Window...> <Grid> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="70"/> </Grid.ColumnDefinitions>...... </Grid> Width dla kolumn Height dla wierszy

29/34 Kontenery można dowolnie zagnieżdżać: <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto"/> <ColumnDefinition Width="auto"/> <ColumnDefinition/> </Grid.ColumnDefinitions> <StackPanel>... </StackPanel> <StackPanel Grid.Column="1" Orientation="Horizontal">... </StackPanel> <WrapPanel Grid.Column="2">... </WrapPanel> </Grid>

30/34 A jak zaprojektujemy nasze okienko? <Window... Title="Obliczenia" Height="200" Width="300" FontSize="14">...

31/34 <Window...> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> </Grid> cztery wiersze, dwie kolumny wysokość wierszy dopasowuje się do zawartości szerokość pierwszej kolumny dopasowuje się do zawartości szerokość kolumny z polem tekstowym rozciągnięta

32/34 <Window...> <Grid> <Grid.RowDefinitions>...</Grid.RowDefinitions> <Grid.ColumnDefinitions>...</Grid.ColumnDefinitions> <Label Margin="5">Pierwsza liczba:</label> <Label Margin="5" Grid.Row="1">Druga liczba:</label> <Label Margin="5" Grid.Row="2">Wynik:</Label> <TextBox Margin="5" Grid.Column="1"/> <TextBox Margin="5" Grid.Row="1" Grid.Column="1"/> <TextBox Margin="5" Grid.Row="2" Grid.Column="1" IsReadOnly="True"/> <Button Grid.Row="3" Grid.ColumnSpan="2" Margin="5" Padding="10,3" HorizontalAlignment="Right"> Oblicz</Button> </Grid> Label etykieta TextBox pole tekstowe IsReadOnly tylko do odczytu przycisk zajmuje cały wiersz

Jak dodać obsługę zdarzeń? również przy pomocy atrybutów: <Button Click="Oblicz"...>Oblicz</Button> // zawartość pliku Window1.xaml.cs: namespace WpfApplication1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void Oblicz(object sender, RoutedEventArgs e) { } } } Ta funkcja zostanie wywołana, gdy użytkownik naciśnie przycisk Oblicz 33/34

34/34 Jak odczytać dane z okna w kodzie programu? najpierw musimy nazwać elementy, do których chcemy mieć dostęp: <TextBox Name="pierwsze".../> <TextBox Name="drugie".../> <TextBox Name="wynik"... IsReadOnly="True"/> następnie w pliku *.cs: private void Oblicz(object sender, RoutedEventArgs e) { int a = int.parse(pierwsze.text); int b = int.parse(drugie.text); int c = a + b; wynik.text = c.tostring(); } pierwsze.text zawartość pola tekstowego int.parse(...) konwersja tekstu na liczbę c.tostring() konwersja zmiennej na tekst