Programowanie komponentowe - ics.p.lodz.plics.p.lodz.pl/~aniewiadomski/io1/pk-wyklad-1.pdf ·...

40
Programowanie komponentowe wykład 0 Informatyka, IV sem. studia dzienne inżynierskie FTIiMS, PŁ

Transcript of Programowanie komponentowe - ics.p.lodz.plics.p.lodz.pl/~aniewiadomski/io1/pk-wyklad-1.pdf ·...

Programowanie komponentowewykł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, 1993Programowanie 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 komponentowewykł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ójwarstwowawarstwa 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 komponentowewykł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

Źródło C/C++

Kompilator Windows

Kompilator LINUX

Kompilator DOS

*.EXE Windows

*.bashLINUX

*.exe DOS

Sys. OpLINUX

Sys. OpWindows

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

plik(i) *.class czyli Bajt-kod

JVM Win2K

JVM Linux

JVM DOS

Kompilator

PlatformaLINUX

PlatformaWindows

Platforma DOS

*.class

*.class

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