Języki i paradygmaty programowania (JIPP) dr hab. inż. Adam Niewiadomski, prof. nadzw. Informatyka, III sem. studia dzienne inżynierskie PWSZ we Włocławku
Program przedmiotu 1 część semestru (ok. 4-5 wykładów) OOP i inne techniki programowania (zarys) Generacje języków programowania Trójwarstwowa architektura aplikacji W. danych, w. logiki, w. Interfejsu użytkownika Fazy życia oprogramowania 2 część semestru (ok. 8-9 wykładów) Język Java (Aplikacje konsoli, graficzny interfejs użytkownika, aplikacje okienkowe) Programowanie obiektowe, zorientowane obiektowo, programowanie komponentowe, klasa-obiektkomponent
http://ics.p.lodz.pl/~aniewiadomski Cykl slajdów nie stanowi kompletnego opracowania, a zwłaszcza nie jest skryptem zastępujacym wykład. Należy traktować go wyłącznie jako zbiór notatek ułatwiajacych słuchaczom udział w zajęciach. Slajdy można przetwarzać pod warunkiem nienaruszania praw autora, w szczegolnosci (ale bez ograniczenia do) rozpowszechniania całosci lub fragmentów w jakiejkolwiek formie bez zgody autora.
Cykl inżynierii oprogramowania (1) Algorytmy i złożoność obliczeniowa Struktury danych, tablice, pętle, instrukcje warunkowe i skoku, sortowanie, wyszukiwanie elementów w tablicach itp. Podstawy programowania Programowanie proceduralne instrukcje sterujące, implementacja podstawowych algorytmów, tablice i dynamiczne struktury danych, kompilacja, praca krokowa, debugging Projektowanie klas, obiektów i ich funkcji składowych, dziedziczenie klas
Cykl inżynierii oprogramowania (2) Języki i paradygmaty programowania Techniki i generacje języków programowania Trójwarstwowa architektura aplikacji Fazy życia oprogramowania (zarys) 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)
Cykl inżynierii oprogramowania (3) Inżynieria oprogramowania Analiza i projektowanie obiektowe, język UML (najprawdopodobniej) 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, programowanie aplikacji klient-serwer, podstawy programowania sieciowego, itp.
Bibliografia, czyli literatura 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, 90zł http://java.sun.com ics.p.lodz.pl/~aniewiadomski Dział,,Dydaktyka'', JiPP
Klasy systemów informacyjnych ERP - Enterprise Resource Planning system informatyczny zarządzający działalnością przedsiębiorstwa jako całością SAP, IFS, JEEVES, INFOR MAX+, Symfonia Forte, Impuls BPSC ERP = MRP I + MRP II MRP I (Material Resource Planning) planowanie materiałowe MRP II (Manufacturing Resource Planning) planowanie produkcyjne
Standardowe moduły ERP Produkcja Logistyka Księgowość Magazyn Sprzedaż Zakupy czego brakuje???
Rozwój ERP ERP są zwane "Back-office" - bo przeznaczone tylko dla personelu w odróżnieniu od systemów klasy CRM Customer Relationship Management Pewne zasoby dostępne są także dla klientów, np. za pośrednictwem WWW Rozwój --> ERP II ''wychodzą poza przedsiębiorstwo'' ECR = Obsługa konsumentow i dostawców (Efficient Consumer Response)
Rozwój ERP cd. SCM = Zarządzanie Łańcuchem Dostaw (Supply Chain Management) RFID Radio Frequency Identification - w systemach kontroli przepływu produktów/towarów w oparciu o fale radiowe np. System Automatycznej Identyfikacji Towarów (SAIT)
Fazy życia oprogramowania 1.Analiza wymagań użytkownika 2.Projektowanie 3.Implementacja 4.Testy i wdrożenie 5.Konserwacja i reengineering Fazy te moga po sobie nastepować wg różnych cyklów, np. kaskadowego, kaskadowego z powrotami, spiralnego, itp.
1. Analiza wymagań użytkownika Dane jakie informacje przetwarza system? Typy danych, formaty, konwersje Użytkownicy kto ma korzystać? Grupy i ich prawa dostępu Warunki odbiorcy gdzie system ma działać? Sprzętowe, lokalowe, finansowe Czy firma ma już system? Jaki? Za ile? Od kiedy? Co chcą zmienić?
2. Projektowanie warstwa danych Baza danych tabele, kwerendy, relacje, więzy integralności Formy normalne tabel, normalizacja Prawa dostępu do tabel Który użytkownik które dane widzi i/lub przetwarza Zgodność z normami prawnymi Jawność/tajność informacji, prawo publikowania Ochrona danych osobowych Zwłaszcza danych wrażliwych
2. Projektowanie warstwa logiki Procesy, podprocesy funkcje systemu np. zaloguj się = sprawdź login + sprawdź hasło + wyświetl zawartość konta użytkownika Przepływ danych Dane wejściowe i wyjściowe Jak przetwarzać dane? Gdzie przechowywać dane wynikowe? Algorytmy specyfikacje procesów Rysunki, pseudokod, język naturalny
2. Projektowanie interfejs użytkownika Interfejs (ang. interface) metoda komunikowania się programu z użytkownikiem Interfejs tekstowy DOS, Norton Commander, Linux Console Szybko działa, ale wymaga znajomości komend Interfejs graficzny Windows, KDE, Gnome Wolniejszy, ale intuicyjny w obsłudze
2. Projektowanie interfejs użytkownika (2) Interfejsy graficzne Okienkowy dla osobnych aplikacji Okienkowy dla aplikacji Przeglądarka internetowa dla aplikacji klientserwer Przed zaprojektowaniem interfejsu trzeba znać możliwości odbiorcy! Sprzęt i system operacyjny Stopień wyszkolenia personelu
3. Implementacja Zapis ustaleń projektowych w języku/językach programowania Warstwy danych Warstwy logiki Warstwy interfejsu użytkownika (-ów) Metodyka obiektowa lub proceduralna Od metody implementacji bardzo silnie zależą fazy analizy i projektu (koszty!!! - obiektowo czy proceduralnie??)
4. Testy i wdrożenie Wdrożenie systemu informacyjnego uruchomienie w docelowym środowisku działania, dla docelowej grupy użytkowników i wykonującego docelowe zadania Środowisko = platforma + otoczenie (np. budynek, inne instalacje) Platforma = sprzęt + system(y) operacyjny(-e) Zadania = przetwarzanie rzeczywistych danych pod rzeczywistym obciążeniem Wersje językowe lokalizacja oprogramowania
4. Testy i wdrożenie (2) Szkolenie personelu Szkolenie bezpośrednie lub pośrednie Szkolenie w trakcie testowania (system celny) Dokumentacja techniczna Systemy pomocy ''Help'', instrukcje obsługi, Warunki eksploatacji i konserwacji Warunki serwisu i gwarancji
4. Testy i wdrożenie (3) T. regresyjne [Roszkowski, 2004] Po zmianach, ''czy nie zmieniono za dużo'' T. operacyjne Testy długookresowe, pomiar niezawodności T. pełnozakresowe Przy pełnym obciążeniu systemu T. wydajnościowe Pomiary szybkości, wydajności (sprzęt!!)
4. Testy i wdrożenie (4) T. negatywne Świadome wprowadzanie błędów T. ergonomiczne Czytelność i wygoda interfejsów T. dokumentacji użytkownika Czytelność ''helpów'', zgodność ze stanem faktycznym T. akceptacyjne Testy ostateczne, ''kupić czy nie kupić'' Testy bezpieczeństwa!!!
4. Testy i wdrożenie (5) - koszty Sprzęt: serwer bazy danych, stacje robocze użytkowników - klienci (PC, laptopy, palmtopy), odpowiednia infrastruktura (sieć, komputerowa, telefony komórkowe) Oprogramowanie: licencja na systemy operacyjne serwera i stacji roboczych, licencja na serwer baz danych, licencja na oprogramowanie. http://www.logistyka.net.pl/ A. Stachowicz-Stanusch, M. Stanusch
4. Testy i wdrożenie (6) - koszty Wdrożenie: analiza przedwdrożeniowa, parametryzacja systemu, ewentualne modyfikacje systemu, instalacja, połączenie z istniejącymi systemami informatycznymi przedsiębiorstwa, szkolenie, próbna eksploatacja, nadzór nad pełną eksploatacją Serwis: umowa stałej opieki serwisowej Zalicza się do następnej fazy, ale umowa zawierana jest przy wdrożeniu
5. Eksploatacja i konserwacja systemu ''Odśmiecanie'' baz danych Nieaktywni użytkownicy Dereplikacja wpisów Obserwacja rejestrów zdarzeń (tzw. logów) Login, logout, awarie, zamknięcia sesji Nowi użytkownicy, modyfikacja uprawnień Dbałość o bezpieczeństwo Wykrywanie ataków Aktualizacja zabezpieczeń Kontrola dostępu Administrowanie systemem
5. Reengineering (2) Reengineering inżynieria wtórna Service packs, aktualizacje, ''łaty'' - patches Uwagi do następnej wersji systemu Funkcje zbędne, nie używane, powielające się Funkcje pożądane, nowe lub o zmienionym działaniu, itp. Reinstalacja systemu (skrajny przypadek) *** Wszystkie powyższe czynności potocznie określa się mianem ''support'' wsparcie
Architektura aplikacji Model trójwarstwowy Warstwa danych Warstwa logiki aplikacji Warstwa interfejsu użytkownika Model-View-Controller wzorzec projektowy, design patern Aplikacja <= System informacyjny 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]);
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 nazywam 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 Allegro Interfejs = DHTML przeglądarka Logika = PHP, serwer Apache Dane = Serwer MySQL JSP www.gazeta.pl Interfejs = jw. Logika = Java, serwer Tomcat Dane = Postgress (???) CGI Wirtualna Polska Interfejs = jw. Logika = Perl... Dane =... ASP, ASP.NET,.NET - www.microsoft.com Ruby, RubyOnRails
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_6_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
Programowanie komponentowe wykład 3 Informatyka, IV sem. studia dzienne FTIiMS, PŁ
Programowanie komponentowe wymaga Znajmości składni języka każdy język programowania można poznać posługując się pewnym schematem Jakie są słowa kluczowe, jak buduje się wyrażenia, funkcje, zmienne, jak tworzy się typy danych, struktury danych, tablice, obiekty, itp. Znajomości bliotek (obiektów, pakietów i komponentów) Czy trzeba samemu tworzyć funkcje i struktury danych, czy może wystarczy skorzystać z gotowych i zoptymalizowanych? Znajomości narzędzi programistycznych szybkość i wygoda tworzenia aplikacji Jak uruchomić kod w danym języku, jak poprawić błędy, jak wygenerować powtarzalne fragmenty kodu, praca krokowa, debugging
Kategorie składniowe Javy (1) 1. Słowa kluczowe nazwy typów, instrukcji sterujących, stałych, operatorów, modyfikatorów dostępu Nie można w ten sposób nazwać zmiennych, funkcji, itp. Słowa zarezerwowane obejmują terminy ''reserved for future use'' przewiduje się, że w przyszłych wersjach Javy wprowadzone będą nowe słowa kluczowe, a wówczas starsze kody mogłyby nie kompilować się w nowych środowiskach, np. w Java 7
Kategorie (2,3) 2. Separatory (9 szt.) ( ) { } ;, [ ] - oddzielają wyrażenia, bloki kodu, klasy - niektóre są także operatorami, np. [ ] operator indeksowania tablicy 3. Komentarze // jednolinijkowy od znaku // do końca linii /* Komentarz blokowy */
Kategorie (4) operatory 4. Operatory a. Priorytet, czyli ''kolejność wykonywania działań'', np. obiekt.tab[2*5] b. Wiązanie (prawe/lewe) wiązanie lewe np. 2+3+4+5 kompilator oblicza kolejno (((2+3)+4)+5) wiazanie prawe, np. x=y=z=2, kompilator oblicza (x=(y=(z=2))) Od prawej wiążą operatory jednoargumentowe i przypisania, pozostałe od lewej
Operatory c.d. c. Ilość argumentów (1, 2 lub 3)!zmiennaLogiczna (1 argument) 3*5, (2 argumenty) x<y? x : y (3 argumenty) d. Wartość (typ rezultatu) następny slajd e. L-wartość (ang. Left-value, L-value) - każde wyrażenie, które może znaleźć się po lewej stronie operatora przypisania, np. X = 2, tab[1] = tab[2] -ale nie: 5+=1 lub 5++, gdyż jest równoznaczne z 5=5+1!!!!
Kategorie (4) operatory cd. Podział przybliżony pod względem typu zwracanej wartości Arytmetyczne + - * % Wynik jest typu jednego z operandów Logiczne! && Wynik true lub false Przypisania = += -= *= ++ -- Wynik jest typu lewego argumentu (czyli L- wartości)
Kategorie (4) operatory (podział przybliżony) Porównania == < >= true lub false Bitowe & ^ << >>> Wynik jest typu jednego z operandów Przydziału pamięci new Wynik jest typu referencyjnego Kontroli typu instanceof Wynik logiczny Zalecane ćwiczenia!
Kategorie (5) Identyfikatory nazwy stałe, czyli literały literały specjalne, np. polskie znaki znakowe (char, String) w, Dziendobry, \xy liczb całkowitych (int, byte) 100, 011, 0xFF00, 55L liczb rzecz. (double, float) 1.5,.6, 0.5f, 0.7D logiczne (boolean) true, false Są to także słowa zarezerwowane zmienne x, i, nazwisko, checkbox1 typy Button, String, int, char
Identyfikatory (nazwy) funkcji np. init(), wyciagnijpierw(25); Występują w trzech kontekstach Deklaracja, int funkcja(double x); Definicja = deklaracja + ciało int funkcja (double x) { // ciało funkcji return rezultat; } Wywołanie: użycie wartości funkcji X = funkcja (3.14);
Sterowanie wykonaniem programu for, while, do..while jak w C/C++ Oprócz np. while(1) Brak konwersji wyrażeń logicznych do int Powinno być while(1==1) if..else,if..else if..else jw. switch..case..default jw. break, continue jw. Przypisanie = (+=, -=,...) Dokładnie jak w C/C++
Sterowanie... cd. bloki instrukcji (obowiązuje przesłanianie nazw zmiennych) int x=2; { int y = 5; System.out.println(""+y); /// Bledem jest np. int x=3; Przeslania zmienna istniejącą } int y=3; // Nie jest to błąd kompilator,,zapomniał'' o y System.out.println(""+y); //EFEKT???
Typy danych w Jawie Typy danych Proste Złożone Tablicowe Obiektowe Biblioteczne Programisty
Typy proste (wbudowane, built-in, primitives) byte 1 bajt, stałoprzec. ze znakiem short 2, int 4, long 8 char 2 kod znaku UNICODE możliwe zapisanie EOF boolean 1 bajt, true/false float 4 bajty, zmiennoprzecinkowa double 8, jw.
Typy tablicowe TYLKO DYNAMICZNE!!! Jednowymiarowa int tab [ ] = new int [6]; Ale nie: int tab[6], bo nie ma tu rezerwacji pamięci operatorem new Dwuwymiarowa double tab [ ] [ ] = new double [10] [10]; Są to przykłady definicji tablic Trójwymiarowa boolean tab[ ][ ][ ]=...
Typy obiektowe Biblioteczne Button java.awt.button Date java.util.date ActionEvent java.awt.event.actionevent String java.lang.string Własne definicja klasy Np. Macierz class Macierz { definicja klasy, czyli pól i funkcji składowych }
Zmienne referencje (de facto: wskaźniki) Zmienna miejsce w pamięci do przechowywania danych to miejsce ma swoją nazwę, jak to w językach imperatywnych 3-ej generacji, nie zaś adres Zmienne (tylko pola klas lub zmienne lokalne/formalne funkcji, brak zmiennych globalnych) automatyczne (tylko typy proste, kompilator sam rezerwuje pamięć i sam ją zwalnia) int x; char znak; dynamiczne (rezerwacja pamięci operatorem new, wszystkie typy obiektowe i tablice) statyczne inicjalizacja wymagana przy deklaracji np. static int x = 5; //nie: static int x;... x=5;
Zmienne deklaracja, przydział pamięci, inicjalizacja Deklaracja int x, y=3; Button b1, b2; Rezerwacja pamięci (nie dotyczy typów prostych) b1 = new Button( Kliknij tu! ); Inicjalizacja x = 25; // typy proste napis = new String( 1.2.3.próba Stringa... ); // typy złożone b2 = b1; // ŹLE - konstruktor kopiujący nie wywoła się, zostaną przypisane ADRESY, nie WARTOŚCI, musi być: b2 = new Button(b1);
Konwencje zapisu kodu w Jawie Klasy wielką literą, bez C lub T z przodu Macierz, Button, String Zmienne małą literą, bez podkreśleń i, nazwiskostudenta, iloscwierszymacierzy zmienna po. jest polem jakiejś innej klasy obiekt.pole zmienna po this jest polem bieżącej klasy this.pole // równoważne: pole, ale z this jest czytelniej zmienna bez poprzedzającego selektora jest argumentem formalnym funkcji lub zm. lokalną/pomocniczą pole
Standardy zapisu kodu... cd. Funkcje czasownik małą literą, dopełnienie wielką getnumber, tostring, add, róbcoś Nazwy pakietów małą literą java.awt; java.mypackage.myclass To klasa MyClass w pakiecie java.mypackage Bloki { // początek bloku // instrukcje } //koniec bloku
Notacja węgierska (Hungarian notation) Źródło: Bates: Poznaj Visual C++ 6.0, Appendix A b boolean bodpowiedz n short, int nwagazawodnika l long lrozmiarpliku fl float flmojapensja d double djegopensja bt Button przycisk ch Checkbox pole wyboru e Event zdarzenie pt Point punkt
Różnice między C/C++ a Javą (1) Typy danych podstawowych niezależne od sprzętu specyficzne dla JVM, a nie dla platformy Nie istnieje pojęcie wskaźnika wszystkie zmienne typów prostych są wartościami int x=0; wszystkie zmienne typów złożonych (tablicowych i agregatów) są referencjami wymagają dynamicznego przydziału pamięci operator * oznacza tylko mnożenie operatory.*, ->, :: nie istnieją this jest referencją
Różnice... (2) Tablice tylko dynamiczne Kurs Tylocha, rozdz. 2.3.17 tablica w Jawie jest obiektem dziedziczy po Object, implementuje interfejs Cloneable deklaracja wymaga przydziału pamięci w zadanej ilości, poprzez podanie liczby elementów... String tab[ ] = new String[5];...lub zbioru inicjalizującego wartości elementów int tablicaint[ ] = {1, 2, 3, 4, 5}; String tab[ ]={new String( pn ),new String( wt )...}; Nazwa tablicy wraz z nawiasami [ ] jest L-wartością tab[0] = niedziela
Różnice... (3) Zwalnianie pamięci Kurs Tylocha, rozdz. 2.3.13 Nie ma operatora delete zwalnianiem pamięci zajmuje się funkcja System.gc() (od ang. garbage collector) funkcja ta wywoływana jest automatycznie co jakiś czas w osobnym wątku, tylko wtedy, gdy nie ma nic innego ważniejszego do zrobienia (wątek ten ma b. niski priorytet) sprawdzane są wszystkie wartości w referencjach; jeśli w żadnej nie ma adresu danego obszaru pamięci, to obszar ten jest zerowany (rysunek)
Różnice... (4) Zwalnianie cd. zwalnianie jawne można wywołać jawnie funkcję System.gc() jeśli obiekt musi przed zniknięciem zwolnić zasoby (np. pozamykać pliki), można nadpisać funkcję finalize(), odziedziczoną po java.lang.object przykład: kurs Tylocha, rozdz. 2.3.12 Wniosek: finalizer działa podobnie jak destruktor dotyczy to także wywołań finalizerów klas-przodków
Różnice... (5) Brak możliwości przeciążania operatorów operacje na niewbudowanych typach danych realizowane są przez funkcje składowe o zwyczajowych nazwach, np. == string1.equals(string2) rez. boolean <=, >... string3.compareto(string4) rez. int = konstruktory klas wszystkie przeciążone operacje przypisania zastąpione są przez konstruktory kopiujące String tekst1 = new String (innystring); String tekst2 = tekst1;//przepisanie ADRESU!! String tekst2 = new String (tekst1); //działa jeśli istnieje konstruktor kopiujący
Konstruktor kopiujący (5') K. kopiujący klasy A w C/C++ - konstruktor, który można wywołać z jedynym parametrem będącym referencją do obiektu klasy A Pozostałe parametry mogą być domyślne W Javie nie ma domyślnych parametrów funkcji K. kopiujący w Javie ma tylko jeden parametr Jeśli konstruktor w Javie odwołuje się do konstruktora klasy bazowej, to robi to poprzez słowo super, koniecznie w pierwszej linii pod nagłówkiem, patrz Różnica (9) Brak list inicjalizacyjnych
Komentarz Różnice 1 5 mają znaczny wpływ na budowę wyrażeń w Javie i, w ogólności, na konstrukcję kodu i działajacych programów. Ich przyswojenie jest istotne z punktu widzenia eliminacji nawyków z C/C++ (nawyków niewłaściwych w Jawie)
Różnice... (6) dostęp do klas, pól i metod Dostęp do klas, pól i metod Kurs Tylocha, rozdz. 2.3.4 w Jawie obowiązuje tzw. dostęp pakietowy Pakiet, podstawowa jednostka, jest katalogiem plików *.class w jednym pliku *.java znajduje się jedna klasa publiczna mogą być inne klasy, ale niepubliczne przykład po kompilacji w jednym pliku *.class znajduje się jedna klasa Przypisanie klasy do pakietu odbywa się instrukcją package nazwa_pakietu ; przykład położenie plików w pakietach określa zm. środ. CLASSPATH przykład dla CLASSPATH = C:\WINNT\java Pakiet może zawierać podpakiety np. java.awt zawiera w sobie java.awt.event zbiór klas odpowiedzialny za zdarzenia w oknach
Różnice... (modyfikatory 1) Modyfikatory dostępu do klasy public pola i składowe są widoczne w pakiecie i poza nim final po klasie nie można dziedziczyć abstract nie można utowrzyć obiektu tej klasy domyślnie: dostęp pakietowy pola i metody widoczne tylko dla klas wewnątrz pakietu Modyfikatory dostępu do pól i funkcji klasy private pole/metoda widoczne tylko w klasie protected pole metoda widoczne w klasie, pakiecie i w klasach dziedziczących public pole metoda widoczne ''wszędzie'' domyślnie ''package'', jw.
Różnice... (modyfikatory 2) Modyfikatory własności funkcji składowych final, static, abstract, synchronized, native dostęp do f-cji st. Nazwaklasy.funkcja() W C/C++ Nazwaklasy::funkcja() Modyfikatory własności pól klas final, static, transient, volatile inicjalizacja pola statycznego tylko w kodzie klasy (nie jak w C) rozdz. Kurs Tylocha 2.3.12 inicjalizator pól statycznych
Różnice... (7) dziedziczenie Brak modyfikatorów dziedziczenia klas (public, private...) Dziedziczenie tylko po jednej klasie jednobazowe Hierarchia klas w pakietach ma postać drzewa każda klasa ma co najwyżej jednego bezpośredniego przodka Upraszcza to graf hierarchii dziedziczenia klas Czasem klasy muszą posiadać pewne funkcje, jeśli chcą aby dla ich obiektów działały metody standardowe Arrays.sort(Object[]) - wymaga aby obiekty miały funkcję compareto(), czyli implementowały interfejs Comparable INTERFEJS klasa abstrakcyjna o zadeklarowanych, ale nie zdefiniowanych funkcjach (jeśli posiada) o polach wyłącznie statycznych (jeśli posiada) zadeklarowana słowem interface
Różnice (7) przykład diagramu schematu dziedziczenia jednobazowego z interfejsami java.lang.object +--java.awt.component +--java.awt.container +--java.awt.panel +--java.applet.applet ActionListener ItemListener class MyApplet
Interfejs jako klasa, klasa interfejsowa Każda klasa implementująca interfejs MUSI zdefiniować jego metody Dzięki temu pewne cechy mają zawsze tę samą nazwę; ułatwia to np. ich wywoływanie przez inne komponenty np. Funkcja Arrays.sort(Object[ ] tab) działa w oparciu o funkcję compareto(...), a więc obiekty w tablicy tab muszą implementować interfejs Comparable Interfejs może dziedziczyć po innych interfejsach (także po kilku), ale nie może dziedziczyć po klasach Interfejs może być deklarowany w jednym pliku *.java z klasami publicznymi mimo tego, że sam jest publiczny Po kompilacji interfejs zostanie umieszczony w osobnym pliku *.class