Programowanie komponentowe wykład 0 Informatyka, IV sem. studia dzienne inżynierskie FTIiMS, PŁ Program przedmiotu ● 2-3 wykłady – OOP i inne techniki programowania (zarys) ● ● 7-8 wykładów – Trójwarstwowa architektura aplikacji ● – W. danych, w. logiki, w. Interfejsu użytkownika Język Java (Aplikacje konsoli, GUI, aplety) ● ● Generacje języków programowania Programowanie obiektowe, zorientowane obiektowo, programowanie komponentowe, klasa-obiekt-komponent 1-2 wykłady – Fazy życia oprogramowania, projektowanie strukturalne (!) http://ics.p.lodz.pl/~aniewiadomski Cykl slajdów nie stanowi kompletnego opracowania, a zwlaszcza nie jest skryptem zastępujacym wyklad. Nalezy traktowac go wyłącznie jako zbiór notatek ułatwiajacych sluchaczom udzial w zajeciach. Można go przetwarzać pod warunkiem nienaruszania praw autora, w szczególnosci (ale bez ograniczenia do) rozpowszechniania całosci lub fragmentów w jakiejkolwiek formie bez zgody autora. Proszę również o niekorzystanie z laptopów i podobnych urządzeń w trakcie wykładu. Cykl inżynierii oprogramowania (1) ● Podstawy programowania (sem. II) – ● Programowanie proceduralne – instrukcje sterujące, implementacja podstawowych algorytmów, tablice i dynamiczne struktury danych, kompilacja, praca krokowa, debugging Programowanie obiektowe (sem. III) – Projektowanie klas, obiektów i ich funkcji składowych, dziedziczenie klas, polimorfizm składowych, zależności pomiędzy klasami, szablony klas i funkcji Cykl inżynierii oprogramowania (2) ● Programowanie komponentowe (sem. IV) – – – – – Trójwarstwowa architektura aplikacji i jej realizacja w języku Java Obiekt – klasa – komponent jako powtarzalne (reusable) fragmenty kodu Wykorzystanie technik OOP i komponentów do produkcji aplikacji niezależnych sprzętowo z tekstowym i/lub graficznym interfejsem użytkownika (GUI) Podstawy analizy i projektowania oprogramowania Fazy życia oprogramowania (zarys) Cykl inżynierii oprogramowania (3) ● Inżynieria oprogramowania (V sem.) – ● Analiza i projektowanie obiektowe, język UML Założenie: słuchacz najpierw poznaje techniki implementacji, później uczy się stosować je na szerszą skalę i uzależniać od nich pozostałe fazy projektu informatycznego – – ''Od szczegółu do ogółu'' Zależy to także od pozostałych przedmiotów ● Bazy danych, sieci komp., bezpieczeństwo systemów, itp. Wymagania wstępne ● Algorytmy i Struktury Danych – – ● Tablice, sortowanie, wybór elementow wg kryteriów, Struktury dynamiczne: listy, stosy, kolejki, drzewa Podstawy Programowania – programowanie proceduralne, podstawowe instrukcje sterujące ● ● Warunki, pętle, skoki, funkcje, Programowanie Obiektowe – programowanie obiektowe i zorientowane obiektowo ● Szczegóły: następny slajd Wymagania wstępne (2) ● ● ● ● ● ● ● ● Zmienna, wskaźnik, referencja Pola i funkcje statyczne klas Tablice i agregaty jako złożone typy danych Klasa i obiekt, pola-atrybuty obiektów Funkcje składowe, czyli metody klas Funkcje przeciążone (ang. overloaded) Konstruktory domyślne, kopiujące, przeciążone Konwersje, promocje przy funkcjach przeciąż. Wymagania wstępne (3) ● ● ● ● ● ● ● Operatory przeciążone jako funkcje składowe i/lub zaprzyjaźnione Agregacja obiektów, pola obiektowe Zawieranie a posiadanie obiektów Modyfikatory dostępu do pól i funkcji w klasie Dziedziczenie klas, modyfikatory dziedziczenia Dziedziczenie wielobazowe, bliższe i dalsze Funkcje polimorficzne Bibliografia (1) Powtórzenie z C/C++ Grębosz J.: Symfonia C++. Kallimach, 1993 Programowanie ogólne, szablony Grębosz J.: Pasja C++. Kallimach, ..... Programowanie ogólne, szablony Stroustroup B.: Język C++.... Bibliografia (2) Java – przegląd, obiektówka i aplety K. Arnold, J. Gosling, Java, WNT 1999, 42 zł Java ogólnie, zwłaszcza aplikacje konsoli Eckel B.: Thinking in Java. Helion, 3 lub 4) 2001 (wyd. Java – aplety Holzner S.: Java 1.2 Szybkie wprowadzenie, Wydawnictwo HELP, 1999, 48zł http://java.sun.com ics.p.lodz.pl/~aniewiadomski – Dział ,,Dydaktyka'', Programowanie Komp. Programowanie komponentowe wykład 1 Informatyka, IV sem. studia dzienne FTIiMS, PŁ Architektura aplikacji ● Model trójwarstwowy – – – Warstwa danych Warstwa logiki aplikacji Warstwa interfejsu użytkownika ● ● Aplikacja <= System informatyczny – Aplikacja ,,nie zawiera'' sprzętu ● ● Model-View-Controller – wzorzec projektowy, design patern Synonimy ,,aplikacji'': oprogramowanie, software, Inne architektury/modele – np. Web Services – 4 warstwy: jw. + usługa sieciowa, odpowiedzialna za zbieranie danych rozproszonych, ● Na rożnych serwerach, w różnych kopiach tej samej bazy Trzy warstwy aplikacji – przykład //--------- dane ------------------int tab[] = new int[N]; tab[0] = 43; tab[1] = 11; ..... tab[N] = 30; //--------- logika -----------------for (i=0; i<N-1; i++) for (j=0; j<N-i-1; j++) if (tab[j]>tab[j+1]) { bufor = tab[j]; tab[j] = tab[j+1]; tab[j+1] = bufor; } //--------- interfejs użytkownika ------for (i=0; i<N; i++) cout<< tab[i]; // System.out.println(+tab[i]); Przykład ,,thin client” A. trójwarstwowa – warstwa danych ● ● Warstwa danych – przechowuje dane w sposób pasywny, nie implementuje procedur dostępu do danych ani ich przetwarzania Wykonuje zlecane przez warstwę logiki podstawowe operacje: – – – – Read Write Modify Delete ● np. SELECT np. INSERT np. UPDATE np. DELETE W tym sensie ''bazy'' w Accessie nie są tylko zbiorami danych, ale całymi aplikacjami Arch. trójwarstwowa warstwa danych (2) ● Technologie tworzenia warstwy danych – – – ● SQL ''bezpośrednio'' narzędzia graficzne generujące kod SQL, np. OpenOfficeBase diagramy związków encji (Entity Relationship Diagram Ok. 95 % baz – relacyjne – 5 % inne (obiektowe, sieciowe, hierarchiczne) Arch. trójwarstwowa – logika aplikacji ● ● ● ● Warstwa logiki – metody przetwarzania danych, funkcje, procedury, procesy, usługi... ...operujące na danych z bazy, przetwarzające je i przekazujące do bazy, do innych procesów/funkcji lub do interfejsu użytkownika Szczegółowe określenie (specyfikacja) tej warstwy wymaga algorytmów w postaci schematów blokowych lub pseudokodów Technologie: 3GL – Pascal, Cobol, Fortran, C/C++, Java, PHP; 4GL – LISP, Prolog Arch. trójwarstwowa – warstwa interfejsu użytkownika ● Zespół operacji odpowiedzialnych za kontakt z użytkownikiem, – – – ● Interfejsy – – – ● Wizualizacja (wyświetlanie) rezultatów procesów Pobieranie danych i kontrola ich poprawności Przyjmowanie poleceń użytkownika Tekstowe Graficzne (Graphical User Interface, GUI) Przeglądarki WWW (wymaga formatowania HTML-em danych wyjściowych) PHP, VBScript, ActionScript, XML Flash, HTML+CSS+JavaScript+DOM=DHTML Warianty arch. trójwarstwowej ● Aplikacja typu ''Desktop'' – – – ● Aplikacja ''biurkowa'', bez połączenia z siecią Całość kodu wykonuje się na stacji roboczej Aby działać nie musi łączyć się z innymi systemami Aplikacja klient-serwer – dwa systemy (programy, maszyny, platformy) komunikujące się ze sobą w celu wykonywania zadanych operacji – – Thick client, gruby klient - interfejs + logika u klienta, a dane na serwerze Thin client, cienki klient – interfejs u klienta, a logika i dane na serwerze Gruby klient <html> <body> <p>Zaloguj sie: </p> <form method="post"> <input type="text" value="wpisz login"> <input type="password" name="haslo"> <input type="submit" onclick='javascript: if (haslo.value == "mojehaslo") document.write("witamy !!!"); else document.write("ZLE !!!");'> </form> </body> </html> Przykład ,,thin client” Przykłady arch. trójwarstwowej ● ● ● ● ● Sortowanie tablicy Google Program pocztowy Word, Paint, Corel www.onet.pl, www.interia.pl – Jakie dane? Jaka logika? Jaki interfejs? Technologie wytwarzania aplikacji Desktop (1) Kod maszynowy (1GL) i assemblery (2GL) sterowniki Języki 3-ciej generacji (3GL) – – – Cobol, Fortran, Basic (programy obliczeniowe) Pascal, C/C++, Java (programy użytkowe) Visual Basic (aplikacje Office – Excel, Word, OpenOfficeOrg) Dokumenty doc, xls, odt, odp nazywamy tu aplikacjami ze względu na występujące w nich elementy interaktywne, np. formularze, przyciski, kontrolki itp. Technologie wytwarzania aplikacji Desktop (2) Języki – – – 4-ej generacji (4GL) SQL – relacyjne bazy danych Prolog, Lisp – Systemy Sztucznej Inteligencji TeX, LaTeX, BibTeX – skład drukarski \documentclass[a4paper,11pt,bf,small,twoside]{itic} %{{{ \usepackage{graphicx} \begin{document} \title{INTERVAL-VALUED LINGUISTIC SUMMARIZATION OF~DATA} \author{ \textbf{Adam \uppercase{Niewiadomski}} } Języki – – i metody wizualne Corel – dokumenty i aplikacje graficzne PowerPoint, OpenOfficeImpress – prezentacje Technologie wytwarzania aplikacji klient-serwer (1) ● Gruby klient – Applety ● ● ● Interfejs = Java+ HTML, przeglądarka Logika = Java (plik *.class ładowany do Temp) Dane = Serwer WWW przechowujący kod <applet code=”kod_appletu.class” width=200 height=200> – ActiveX ● ● ● skaner MKS Interfejs = C++, ActiveX, Logika = C++ Dane = Serwer WWW przechowujący kod Technologie wytwarzania aplikacji klient-serwer (2) ● Cienki klient – PHP ● ● ● – ● ● – ● ● np. www.gazeta.pl Interfejs = jw. Logika = Java, serwer aplikacji Tomcat, Glassfish Dane = Postgress, CGI ● – – Interfejs = DHTML przeglądarka Logika = PHP, serwer aplikacji Apache Dane = Serwer MySQL, SQLLite JSP ● np. Allegro np. Wirtualna Polska Interfejs = jw. Logika = Perl ... Dane = .... ASP, ASP.NET, .NET - www.microsoft.com Ruby, RubyOnRails Programowanie komponentowe wykład 2 Informatyka, IV sem. studia dzienne FTIiMS, PŁ Java – historia (1) ● James Gosling – pomysł stworzenia języka niezależnego od sprzętu (ściślej: od platformy) (Sun Microsystems – California, 1990) – – – Pierwsza nazwa – OAK (okazała się zastrzeżona) Pierwotne przeznaczenie – interfejsy urządzeń AGD i audio-video Modyfikacje i nowe modele sprzętu wymagały częstych zmian oprogramowania – koszty ! ● np. telefony komórkowe Java – historia (2) ● ● ● Niezależność sprzętowa znalazła zastosowanie w usłudze WWW 1993 pierwsza przeglądarka WWW, HotJava, która obsługiwała programy w Javie, jednak nadal było to rozwiązanie lokalne Suna, gdyż inne firmy nie wytwarzały oprogramowania zgodnego z tym standardem 1995 przeglądarka Netscape Navigator 2.0 obsługuje Applety Java, co ustanowiło przyjęcie rozwiązania dotąd lokalnego jako ogólnego standardu (!) Zależność aplikacji od sprzętu ● Program zależny od platformy Kompilator LINUX Źródło C/C++ Kompilator Windows Kompilator DOS LINUX Sys. Op LINUX *.EXE Windows Sys. Op Windows *.bash *.exe DOS Sys. Op DOS Zależność od platformy na przykładzie programów w C/C++ ● ● ● ● Program w wersji źródłowej wymaga kompilacji i konsolidacji (linkowania) z bibliotekami zgodnymi z daną platformą Formaty plików pośrednich i wynikowych są inne dla poszczególnych platform (np. *.obj, *.exe, *.dll) *.exe zawiera listę instrukcji danego procesora Zatem: na każdy sprzęt konieczny jest inny kompilator, linker oraz zestaw bibliotek – Duże koszty, – brak przenośności źródeł oraz gotowego oprogramowania Niezależność sprzętowa aplikacji ● Program niezależny od sprzętu Źródło *.java Kompilator plik(i) *.class czyli Bajt-kod ............. Linux Platforma LINUX JVM Win2K Platforma Windows JVM DOS JVM *.class *.class *.class Platforma DOS Niezależność oprogramowania od platformy ● ● ● ● Kod źródłowy kompilowany jest zawsze tą samą metodą i łączony z tymi samymi bibliotekami Jest to możliwe, gdyż plik wynikowy *.class (tzw. kod pośredni, bajt-kod) zawiera instrukcje dla programu wykonującego, a nie bezpośrednio dla procesora Program wykonujący (interpreter) odpowiada za przetłumaczenie poleceń z pliku *.class na rozkazy danego procesora Technologie – .net (C#, J#, VB.net) – Ruby, RubyOnRails są innymi niż Java przykładem tworzenia oprogramowania niezależnego od sprzętu Java Virtual Machine ● ● ● ● Wirtualna Maszyna Javy __Interpreter bajt-kodu__ (czyli poleceń w plikach *.class) JVM działa analogicznie jak procesor przetwarzający kod w pliku .EXE Istnieją implementacje na praktycznie wszystkie platformy – – np. Windows – środowisko uruchomieniowe JRE j2re-1_7_0_11-windows-i586.exe Biblioteki ● ● Niezależność sprzętowa to także biblioteki Niezależne od platformy zbiory klas i ich metod składowych, czyli tzw. API – Application Programming Interface ● ● Pakiet to zbiór klas, gdzie – – ● http://java.sun.com/j2se/1.4.2/docs/api/ nazwa pakietu nazwa klasy = nazwa katalogu = nazwa pliku Pakiety na dysku są rozpakowane (katalogi z plikami *.class) lub ''spakowane'' do plików.jar (java archive) Plusy niezależności sprzętowej (1) Szerokie zastosowania w Internecie – Zamieszczając aplet Javy na stronie nie trzeba myśleć o tym jaki komputer ma odbiorca Mały rozmiar kodu wynikowego – 1kB appletu *.class vs. ok. 200kB .exe drukującego jedną linię tekstu ● Jedna metoda kompilacji i jeden zestaw pakietów – Kod klas i funkcji bibliotecznych jest odczytywany przez JVM, a nie przez różne procesory, a więc działa podobnie Plusy niezależności sprzętowej (2) ● Na 1 dobry program napisany w C++ przypada 3,7 złych programów. W Javie proporcja ta wynosi 1,7. ● ● Napisanie programu w Javie zajmuje średnio 3 krotnie mniej czasu. ● Programy w Javie są nawet 2-3 krotnie krótsze (nie licząc komentarzy Javadoc) Minusy niezależności sprzętowej (1) Spowolnienie działania (dodatkowy program między procesorem a kodem) – Plik *.class nie jest bezpośrednio odczytywany przez procesor, ale przez program interpretujący, czyli JVM ● Programy Javy ładują się 6-krotnie wolniej. – Program napisany w Javie potrzebuje statystycznie 2-3 krotnie więcej RAM niż napisany C++ i działa do 10x wolniej Minusy niezależności sprzętowej (2) Konieczność zainstalowania JVM przy pierwszym uruchomieniu programu – Przy wolnym łączu uniemożliwiało to działanie Javy Niemal całkowity brak współpracy z kodami w innych językach – W C/C++ można było zlinkować do .exe funkcje napisane np. w Pascalu i skompilowane do *.obj