Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie komponentowe jesień-zima 2013

Podobne prezentacje


Prezentacja na temat: "Programowanie komponentowe jesień-zima 2013"— Zapis prezentacji:

1 Programowanie komponentowe jesień-zima 2013
Wykład 1 Wprowadzenie dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki

2 Warunki zaliczenia Wykład/Egzamin Test pisemny Laboratorium – na podstawie rozwiązań ćwiczeń

3 Zakres materiału Filozofia programowania komponentowego jako odmiany programowania obiektowego Przykłady technologii komponentowych: Java – Spring i EJB (to będzie na przedmiocie Java 2) Platforma .NET Poznanie języków programowania C++/CLI C# Poznanie środowisk i bibliotek programowania Microsoft Visual Studio 2010 Windows Forms

4 Paradygmat programowania
Proceduralne Strukturalne Liniowe Programowanie Obiektowe Komponentowe Zorientowaneobiektowo Zdarzeniowe Aspektowe

5 Programowanie liniowe

6 Programowanie proceduralne
Uporządkowanie czynności Metoda programowania polegająca na dzieleniu kodu na procedury, czyli fragmenty wykonujące ściśle określone operacje. Procedury nie powinny korzystać ze zmiennych globalnych (w miarę możliwości), lecz pobierać i przekazywać wszystkie dane (czy też wskaźniki do nich) jako parametry wywołania. Instrukcje goto mogą być wprawdzie używane w procedurach, ale w żadnym wypadku celem wskoczenia w środek innej procedury.

7 Programowanie strukturalne
Uporządkowanie danych Programowanie strukturalne to metoda programowania zalecająca hierarchiczne dzielenie kodu na moduły, które komunikują się jedynie poprzez dobrze określone interfejsy. Jest to rozszerzenie koncepcji programowania proceduralnego. Programowanie obiektowe Uporządkowanie danych + skojarzenie czynności ze strukturami danych Programowanie obiektowe to sposób tworzenia programów komputerowych, w którym definiujemy programy za pomocą "obiektów" - elementów łączących stan (czyli dane) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. Podejście to różni się od tradycyjnego programowania proceduralnego, gdzie dane i procedury nie są ze sobą bezpośrednio związane. Programowanie obiektowe ma ułatwić pisanie, konserwację i wielokrotne użycie programów lub ich fragmentów.

8 Programowanie zorientowane obiektowo (OOP)
Abstrakcja Każdy obiekt w systemie służy jako model abstrakcyjnego "wykonawcy", który może wykonywać pracę, opisywać i zmieniać swój stan, oraz komunikować się z innymi obiektami w systemie, bez ujawniania, w jaki sposób zaimplementowano dane cechy. Enkapsulacja ukrywanie implementacji, hermetyzacja. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko wewnętrzne metody obiektu są uprawnione do zmiany jego stanu. Każdy typ obiektu prezentuje innym obiektom swój "interfejs", który określa dopuszczalne metody współpracy.

9 Programowanie zorientowane obiektowo (OOP)
Ponowne wykorzystanie klas Dziedziczenie umożliwienia definiowanie i tworzenia specjalizowanych obiektów na podstawie bardziej ogólnych. Dla obiektów specjalizowanych nie trzeba ponownie określać wszystkich jego elementów, lecz tylko te, których nie ma obiekt ogólniejszy. Kompozycja Polega na budowaniu nowych obiektów z obiektów już istniejących wykorzystując je jako „cegiełki”. Taki obiekt posiada wszystkie elementy obiektów składowych. Polimorfizm (wielopostaciowość) Zachowanie się obiektu zależy od kontekstu w jakim jest on użyty. Obiekt może ujawniać wszystkie swoje cechy lub cechy swoich przodków.

10 Programowanie aspektowe
Programowanie aspektowe (aspect-oriented programming, AOP) to paradygmat tworzenia programów komputerowych wspomagający separację zagadnień i rozdzielenie programu na części w jak największym stopniu niezwiązane funkcjonalnie. Chodzi o podzielenie programu na elementy realizujące poszczególne funkcjonalności, np. związane z wyświetlaniem napisu, obsługą pliku lub bazy danych. Takie zagadnienia nazywa się problemami przekrojowymi. Dana funkcjonalność może pojawiać się w różnych częściach kodu, czyli przekraczać granice projektowe: - metody tej samej klasy - metody różnych klas (w pakiecie) - metody klas w różnych pakietach Aspekt jest dodatkową konstrukcją języka grupującą funkcjonalności. Podlega zasadom dziedziczenia i polimorfizmu. AspectJ – rozszerzenie języka Java AJDT - AspectJ Development Tools – rozszerzenie środowiska Eclipse

11 Programowanie zdarzeniowe
Ideą programowania zdarzeniowego jest to, że zaimplementowane przez nas funkcje nie są wywoływane jawnie w kodzie programu, lecz przez system operacyjny lub wydzielony moduł programu. Komunikaty: Funkcje obsługujące tzw. kolejkę komunikatów pochodzących od systemu lub: • mysz; • klawiatura; • zmiana w interfejsie graficznym programu; • zegar; • operacje plikowe lub sieciowe. Wyjątki: Funkcje obsługujące błędy czasu wykonywania mogące wystąpić w programie: • operacje arytmetyczne (np. dzielenie przez zero); • operacje wejścia / wyjścia (brak pliku, brak połączenia sieciowego); • błędy adresowania pamięci (przekroczenie zakresu tablicy, nieistniejący obiekt).

12 Zdarzeniowy model aplikacji
System Windows bazuję na komunikatach, które zarządzają stanem aplikacji. Komunikaty informują aplikacje o tym co się dzieje w systemie. - komunikaty poleceń (ang. command messages) - wysyłane w celu wykonania jakiejś czynności komunikaty powiadomień (ang. notification messages) - dla powiadomienia aplikacji lub systemu o wystąpieniu zdarzenia. Komunikaty przetwarzane są w kolejce 1. wystąpienie zdarzenia - system umieszcza je w kolejce komunikatów, 2. proces pobiera komunikat z kolejki 3. komunikat jest wysyłany pod adresem okna docelowego, 4. jeżeli w procedurze okna, uwzględniono jego obsługę, jest ona wywoływana, w przeciwnym wypadku obsługa w sposób domyślny

13 Delegacyjny model obsługi zdarzeń
Programowanie GUI jest programowaniem zdarzeniowym, opartym na koncepcji tzw. funkcji callback. Funkcja typu callback zawarta w naszym programie jest wywoływana nie przez program, ale przez sam system np. w reakcji na zdarzenia, takie jak naciśnięcie klawisza czy kliknięcie myszą. W Javie i .NET wprowadzono tu koncepcję "oddelegowania" obsługi: metoda, która obsługuje zdarzenie jest metodą innej klasy niż obiekt, któremu zdarzenie się przytrafiło. Słuchacz (ang. Listener) to obiekt, który może obsługiwać zdarzenia. Aby móc generować obiekty-Słuchacze, klasa musi implementować interfejs nasłuchu. Interfejs nasłuchu zawiera abstrakcyjne metody do obsługi zdarzeń. Jego implementacja oznacza, iż metody te zyskują konkretne definicje. Java i .NET dostarczają wiele standardowych interfejsów nasłuchu, przygotowanych do odbioru konkretnych rodzajów zdarzeń. Klasy-słuchacze mogą implementować jeden lub kilka z tych interfejsów, zyskując w ten sposób zdolność do obsługi wybranych zestawów rodzajów zdarzeń.

14 Programowanie komponentowe
Definicja (Clemens Szyperski) komponent jest podstawowym elementem, z którego budowane jest oprogramowanie, posiada opisane deklaratywnie interfejsy, a wszystkie wymagane przez niego zależności są podane wprost. Dzięki temu możliwe jest przekazanie go do wdrożenia osobie, która nie jest jego twórcą. Komponent (w implementacji) jest rozszerzeniem obiektu. Komponent jest zbudowany z jednej lub kilku klas. Komponent posiada deklaracje oferowanych interfejsów Komponent posiada deklaracje żądanych zależności. Komponent to obiekt, który oferuje usługi i żąda ich od zewnętrznych komponentów, jednocześnie ukrywając swoją strukturę wewnętrzną

15 Obiekty a komponenty Programowanie obiektowe
Programowanie komponentowe częściowa hermetyzacja wymuszona hermetyzacja – komunikacja poprzez interfejsy Dobrowolne definiowanie interfejsów Wymuszone definiowanie abstrakcyjnych interfejsów, które określają sposób komunikacji Powszechne stosowanie dziedziczenia klas Dziedziczenie rzadziej stosowane, głównie do interfejsów Powtórne użycie kodu poprzez polimorfizm i późne wiązanie wywołań powtórne użycie kodu na poziomie binariów

16 7 kryteriów istnienia komponentu
Wg Bertranda Meyera (2001) Może być użyty przez inne elementy programu Jego użycie nie wymaga interwencji programisty Posiada pełną specyfikację zależności Specyfikuje oferowaną przez siebie funkcjonalność Może być użyty wyłącznie na podstawie tej specyfikacji Można go złożyć z innymi komponentami Integruje się z systemem w sposób szybki i bezproblemowy (wyłącznie poprzez konfigurację)

17 Właściwości komponentów
W odróżnieniu od obiektów, nie są jednostkami aktywnymi, nie tworzą i nie usuwają samodzielnie swoich instancji. Zarządzaniem komponentami zajmuje się kontener steruje procesem tworzenia instancji komponentów (i ich odzyskiwania) rozwiązuje zależności pomiędzy komponentami zarządza cyklem życia komponentów Zajmuje się „techniczną” stroną działania: zarządza zasobami, zarządza transakcjami, równoważy obciążenie żądań nadchodzących od klientów

18 Podstawy języka C# C# Cookbook, 2nd Edition
350 Solutions for C# Programmers By Jay Hilyard, Stephen Teilhet Marcin Lis C#. Ćwiczenia. Wydanie III Helion Krzysztof Rychlicki-Kicior Tablice informatyczne. C#

19 Informacje podstawowe
C# to obiektowy język programowania zaprojektowany przez A. Hejlsberga dla firmy Microsoft w 2001 roku CSharp ma wiele cech wspólnych z językami C++, Java, a także Pascal i Delphi. Program napisany w C# jest kompilowany do języka CIL (Common Intermediate Language), specjalnego kodu pośredniego wykonywanego w środowisku uruchomieniowym takim jak .NET, Mono, DotGNU. Kod programu jest zbiorem klas. C# zawiera mechanizmy odzyskiwania pamięci i obsługę wyjątków (try – catch). Programy tworzone w środowisku .NET, niezależnie od używanego języka, wymagają specjalnego środowiska uruchomieniowego CLR (Common Language Runtime).

20 Środowiska programistyczne C#
Microsoft Visual Studio (wersje od 2003 do 2012) Borland Turbo C# Explorer

21 Typy aplikacji w MSVC

22 Aplikacja konsolowa

23 Aplikacja okienkowa

24 Budowa programu konsolowego
using System; using System.Collections.Generic; using System.Text; Użycie przestrzeni nazw dla klas (jak w CPP lub jak import w Javie) namespace ConsoleApplication1 { class Program static void Main(string[ ] args) Console.WriteLine(”Witaj w środowisku Microsoft Visual C#.”); } Przestrzeń nazw – zbiory zdefiniowanych klas Klasa – podstawowy element programowania obiektowego Główna funkcja programu

25 Komentarze – jak w CPP

26 Interaktywny program konsolowy

27 Konwersja łańcuch - liczba
string base2 = "11"; string base8 = "17"; string base10 = "110"; string base16 = "11FF"; Console.WriteLine("Convert.ToInt32(base2, 2) = " + Convert.ToInt32(base2, 2)); Console.WriteLine("Convert.ToInt32(base8, 8) = " + Convert.ToInt32(base8, 8)); Console.WriteLine("Convert.ToInt32(base10, 10) = " + Convert.ToInt32(base10, 10)); Console.WriteLine("Convert.ToInt32(base16, 16) = " + Convert.ToInt32(base16, 16)); Convert.ToInt32(base2, 2) = 3 Convert.ToInt32(base8, 8) = 15 Convert.ToInt32(base10, 10) = 110 Convert.ToInt32(base16, 16) = 4607

28 Zmienne w języku C#

29 Nazwy zmiennych w C# W języku C# ważna jest wielkość liter.

30 Przykład sumowania

31 Typy zmiennych w C#

32 Instrukcje wejścia / wyjścia

33 Instrukcja wejścia bez parametru
Console.ReadLine(); int zmienna = Convert.ToInt16(Console.ReadLine()); string tekst = Console.ReadLine(); Console.WriteLine("Program oblicza sumę dwóch liczb."); Console.Write("Podaj a="); double a = Convert.ToDouble(Console.ReadLine()); Console.Write("Podaj b="); double b = Convert.ToDouble(Console.ReadLine()); double Suma = a+b; Console.WriteLine("Suma={0}", Suma); Console.ReadLine();

34 Proste operacje arytmetyczne
using System; namespace ConsoleApplication1 { class Program static void Main(string[] args) int a, b, c; a = 5; b = 20; c = b - a; Console.WriteLine("a = " + a); Console.WriteLine("b = " + b); Console.WriteLine("b - a = " + c); }

35 Matematyczne funkcje wbudowane
class Trygonometria { static void Main() int kat; double y; Console.WriteLine("Obliczanie wartości funkcji cosinus!"); Console.Write("Podaj wielkość kąta:"); kat=Convert.ToInt16(Console.ReadLine()); y=Math.Cos(Math.PI/180*kat); Console.WriteLine("Cos("+kat+")="+y); Console.ReadLine(); }

36 Matematyczne funkcje wbudowane

37 Dzielenie całkowite


Pobierz ppt "Programowanie komponentowe jesień-zima 2013"

Podobne prezentacje


Reklamy Google