Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

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

Podobne prezentacje


Prezentacja na temat: "Programowanie komponentowe jesień-zima 2013 Wykład 1 Wprowadzenie dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki"— Zapis prezentacji:

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

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

3 Zakres materiału 3 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 Programowanie Zorientowane obiektowo Proceduralne Strukturalne Liniowe Obiektowe Zdarzeniowe Aspektowe Komponentowe

5 5 Programowanie liniowe

6 Programowanie proceduralne Metoda programowania polegająca na dzieleniu kodu na procedury, czyli fragmenty wykonujące ściśle określone operacje. Uporządkowanie czynności 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 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. Uporządkowanie danych 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. 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. Polimorfizm (wielopostaciowość)

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 12 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ń 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. 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. 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ń. 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ą. 13

14 Programowanie komponentowe 14 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. Komponent (w implementacji) jest rozszerzeniem obiektu. Dzięki temu możliwe jest przekazanie go do wdrożenia osobie, która nie jest jego twórcą. 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 15 Programowanie obiektoweProgramowanie komponentowe częściowa hermetyzacjawymuszona hermetyzacja – komunikacja poprzez interfejsy Dobrowolne definiowanie interfejsówWymuszone 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 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 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# 18 C# Cookbook, 2nd Edition 350 Solutions for C# Programmers By Jay Hilyard, Stephen TeilhetJay Hilyard, Stephen Teilhet Marcin Lis C#. Ćwiczenia. Wydanie III Helion Krzysztof Rychlicki-Kicior Krzysztof Rychlicki-Kicior Tablice informatyczne. C#

19 Informacje podstawowe 19 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# 20 Microsoft Visual Studio (wersje od 2003 do 2012) Borland Turbo C# Explorer

21 Typy aplikacji w MSVC 21

22 Aplikacja konsolowa 22

23 Aplikacja okienkowa 23

24 Budowa programu konsolowego 24 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 25

26 Interaktywny program konsolowy 26

27 Konwersja łańcuch - liczba 27 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# 28

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

30 Przykład sumowania 30

31 Typy zmiennych w C# 31

32 Instrukcje wejścia / wyjścia 32

33 Instrukcja wejścia bez parametru 33 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 34 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 35 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 36

37 Dzielenie całkowite 37


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

Podobne prezentacje


Reklamy Google