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) Generacje języków programowania 7-8 wykładów Trójwarstwowa architektura aplikacji W. danych, w. logiki, w. Interfejsu użytkownika Język Java (Aplikacje konsoli, GUI, aplety) 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, 2001 (wyd. 3 lub 4) 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 Model-View-Controller wzorzec projektowy, design patern Aplikacja <= System informatyczny Aplikacja,,nie zawiera'' sprzętu 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 np. SELECT Write np. INSERT Modify np. UPDATE Delete 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, Wizualizacja (wyświetlanie) rezultatów procesów Pobieranie danych i kontrola ich poprawności Przyjmowanie poleceń użytkownika Interfejsy 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. Allegro Interfejs = DHTML przeglądarka Logika = PHP, serwer aplikacji Apache Dane = Serwer MySQL, SQLLite JSP np. www.gazeta.pl Interfejs = jw. Logika = Java, serwer aplikacji Tomcat, Glassfish Dane = Postgress, CGI 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 *.bash LINUX Sys. Op LINUX Źródło C/C++ Kompilator Windows *.EXE Windows Sys. Op Windows Kompilator DOS *.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... JVM JVM Linux Win2K Platforma LINUX Platforma Windows *.class *.class JVM DOS Platforma DOS *.class
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 http://java.sun.com/j2se/1.4.2/docs/api/ Pakiet to zbiór klas, gdzie nazwa pakietu = nazwa katalogu nazwa klasy = 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