Programowanie komponentowe jesień-zima 2013

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

Programowanie obiektowe
Programowanie Wizualne WYKŁAD 5
Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
Programowanie obiektowe
Wprowadzenie do C++ Zajęcia 2.
CORBA Łukasz Wnęk.
CLR na platformie .NET Tomasz Kostarski.
Platforma .Net i Vs.Net.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje
Podstawy informatyki Powtórka Grupa: 1A Prowadzący: Grzegorz Smyk
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
Wzorce projektowe w J2EE
Wstęp do programowania obiektowego
Projektowanie i programowanie obiektowe II - Wykład IV
Praca Inżynierska „Analiza i projekt aplikacji informatycznej do wspomagania wybranych zadań ośrodków sportowych” Dyplomant: Marcin Iwanicki Promotor:
Programowanie obiektowe W1 Wprowadzenie
SZPIF – Harmonogram, Opis narzędzi, Schemat bazy danych
C# Windows Forms Zastosowania Informatyki Wykład 2
Wykonawcy:Magdalena Bęczkowska Łukasz Maliszewski Piotr Kwiatek Piotr Litwiniuk Paweł Głębocki.
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Rozwój aplikacji przy wykorzystaniu ASP.NET
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Podstawy programowania II
Źródła: podręcznikopracował: A. Jędryczkowski.
Opracował : Przemysław Drzymała
Podstawy Programowania
Systemy operacyjne.
Programowanie strukturalne i obiektowe
Jakub Wołczko W obiektowym świecie… Jakub Wołczko
Programowanie Windows na przykładzie C# część 1
Podstawy działania wybranych usług sieciowych
ŻYWE JĘZYKI PROGRAMOWANIA LIVING IT UP WITH A LIVE PROGRAMMING LANGUAGE Sean McDirmid Ecole Polytechnique Fédérale de Lausanne (EPFL)
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
WPROWADZENIE W ŚWIAT OBIEKTÓW
JAVA.
Komponentowe systemy rozproszone Wprowadzenie. Komponent... jest to podstawowa jednostka oprogramowania z kontraktowo (deklaratywnie) opisanymi interfejsami,
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe – język C++
Programowanie obiektowe 2013/2014
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
Programowanie w języku C++
Projektowanie stron WWW
UML W V ISUAL S TUDIO Mateusz Lamparski. UML D EFINICJA Unified Modeling Language (UML) to graficzny język do obrazowania, specyfikowania, tworzenia i.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Systemy operacyjne Wykład 3a Działanie aplikacji okienkowej dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki
Diagram klas Kluczowymi elementami są: klasy (class)
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Komponentowe systemy rozproszone Wprowadzenie. Komponent... jest to podstawowa jednostka oprogramowania z kontraktowo (deklaratywnie) opisanymi interfejsami,
Projektowanie obiektowe. Przykład: Punktem wyjścia w obiektowym tworzeniu systemu informacyjnego jest zawsze pewien model biznesowy. Przykład: Diagram.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
Platforma .Net.
Programowanie Zaawansowane
Podstawy programowania
Waldemar Bartyna Pytania egzaminacyjne 1.
Programowanie Obiektowe – Wykład 6
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
Wprowadzenie do programowania obiektowego
Podstawy programowania
JavaBeans by Paweł Wąsala
Programowanie w Javie 1 Dr Robert Kowalczyk
Zapis prezentacji:

Programowanie komponentowe jesień-zima 2013 Wykład 1 Wprowadzenie dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz

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

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

Paradygmat programowania Proceduralne Strukturalne Liniowe Programowanie Obiektowe Komponentowe Zorientowaneobiektowo Zdarzeniowe Aspektowe

Programowanie liniowe

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.

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.

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.

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.

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

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).

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

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ń.

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ą

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

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ę)

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

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#

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).

Środowiska programistyczne C# Microsoft Visual Studio (wersje od 2003 do 2012) Borland Turbo C# Explorer http://www.turboexplorer.com/csharp http://www.icsharpcode.net/opensource/sd/

Typy aplikacji w MSVC

Aplikacja konsolowa

Aplikacja okienkowa

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

Komentarze – jak w CPP

Interaktywny program konsolowy

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

Zmienne w języku C#

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

Przykład sumowania

Typy zmiennych w C#

Instrukcje wejścia / wyjścia

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();

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); }

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(); }

Matematyczne funkcje wbudowane

Dzielenie całkowite