Informatyka I dr inż. Andrzej Czerepicki a.czerepicki@wt.pw.edu.pl http://www2.wt.pw.edu.pl/~a.czerepicki Politechnika Warszawska Wydział Transportu 2018
Sprawy organizacyjne Harmonogram zajęć Regulamin zajęć Efekty kształcenia KRK Warunki zaliczenia przedmiotu Inne sprawy organizacyjne 2
Plan wykładu Co to jest programowanie oraz program komputerowy Język programowania Java Struktura programu w Java Aplikacja konsolowa Wyprowadzanie danych na ekran 3
Programowanie Programowanie proces implementacji algorytmu w postaci kodu źródłowego (programu) z wykorzystaniem języka programowania Algorytm Dane Program Algorytm jest uniwersalny Program komputerowy jest ściśle związany z wybranym językiem programowania Każdy algorytm operuje na danych 4
Język programowania Język programowania sztuczny formalny język, za pomocą którego można zapisać algorytm w formacie umożliwiającym go wykonanie na komputerze Alfabet Składnia Semantyka 5
Alfabet języka programowania Zbiór dopuszczalnych znaków Litery {a, b,. z } {A, B, Z } Cyfry { 0, 1, 2 9} Znaki specjalne spacja!@#$%^&*().. Kod programu nie może zawierać znaków nie należących do alfabetu (!) 6
Gramatyka języka programowania zasady budowy konstrukcji języka ze znaków alfabetu a # if (a > b ) int k = 20;? b F 1 Reguły gramatyki while( x!=5 ) Alfabet Konstrukcje języka 7
Formy notacji gramatyki języka programowania Forma tekstowa (BNF) <cyfra> :: 0 1 2 3 4 5 6 7 8 9 <liczba> :: <cyfra> <cyfra><liczba>.. Forma graficzna (diagramy) liczba cyfra end 8
Semantyka języka programowania Semantyka odpowiada na znaczenie konstrukcji gramatycznej języka programowania if( a > b ) { a = b; } Jeśli wartość zmiennej a jest większa od wartości zmiennej b, przypisz zmiennej a wartość zmiennej b while( x!= 0 ) x--; Póki wartość zmiennej x jest różna od zera, zmniejsz wartość x o jeden 9
Język programowania Współczesny język programowania: został zaprojektowany w połowie lat 90. XX wieku Język obiektowy: realizuje popularną koncepcję programowania obiektowego, co pozwala na budowę dużych oraz stabilnych systemów informatycznych Wieloplatformowy: działa na większości platform (Windows, Linux, aplikacje WWW, urządzenia wbudowane, platformy mobilne etc.) 10
Kod źródłowy Java Plik tekstowy o rozszerzeniu *.java Można edytować za pomocą dowolnego edytora tekstowego W praktyce stosuje się zintegrowane środowiska programowania (IDE ang. Integrated Development Environment) pozwalające na pełną kontrolę nad cyklem życiowym programu Na zajęciach będzie wykorzystane IDE NetBeans 8.x 11
Cykl programowania w Java start Edycja kodu źródłowego Kompilacja tak Są błędy? nie Uruchomienie programu tak Działa? Nie tak jak powinien koniec 12
Kompilacja Kompilacja proces zamiany kodu źródłowego programu na kod maszynowy (syn.: binarny, wykonywalny) Aplikacja.java Kompilacja Aplikacja.class Kompilator program dokonujący kompilacji W Java kompilatorem jest program o nazwie javac 13
Błędy kompilacji Jeśli program zawiera konstrukcje niedozwolone z pkt. widzenia gramatyki języka, kompilacja kończy się niepowodzeniem Kompilator zgłasza listę błędów kompilacji Plik *.class nie powstaje Uruchomienie programu nie ma sensu (mimo że w niektórych przypadkach jest możliwe) Brak kompilacji na zaliczeniu lab. świadczy że student nie rozumie podstaw gramatyki języka programowania 14
Uruchomienie programu Java Kod źródłowy Kompilacja Kod pośredni (B-code) JRE dla Windows Maszyna wirtualna Java Maszyna wirtualna Java JRE dla Unix Windows OS Unix OS JRE - Java Runtime Environment 15
Zintegrowane środowisko programowania NetBeans Możliwość edycji kodu programu Podpowiadanie instrukcji Podświetlanie konstrukcji gramatycznych Podświetlanie prostych błędów gramatycznych Kompilacja programu Kontrolowane uruchomienie programu Emulacja różnych urządzeń wyjścia (konsola, aplet na stronie WWW, urządzenie mobilne, etc.) Możliwość śledzenia wykonania programu krok po kroku 16
Uruchomienie programu Program może być uruchomiony samodzielnie (p. instrukcję do ćwiczenia nr 1), lub poprzez środowisko NetBeans (klawisz F6) Przed uruchomieniem program powinien być skompilowany W większości przypadków dzieje się to automatycznie Wyniki działania programu zostaną wyświetlone w odrębnym okienku (tekstowym lub graficznym zależnie od rodzaju aplikacji) 17
Debugowanie programu Debugowanie (ang. debugging odpluskwianie ) - proces nadzorowanego wykonania programu krok po kroku w celu wyłapania błędów semantycznych (program działa ale nie tak jakbyśmy chcieli) Bug błąd semantyczny w programie ( pluskwa ) Breakpoint punkt zatrzymania się programu Uruchomienie programu w trybie Debug (Ctrl+F5) pozwala zatrzymać tymczasowo wykonanie programu w miejscu wystąpienia breakpoint w celu umożliwienia programiście zapoznania się ze stanem aplikacji 18
Zakończenie programu Program raz uruchomiony powinien być zakończony Zakończenie programu następuje: Po wykonaniu ostatniej instrukcji programu, zamknięciu okna głównego programu (aplikacja z interfejsem graficznym), etc. Po wystąpieniu sytuacji awaryjnej nie obsłużonej przez użytkownika Na skutek zatrzymania przez użytkownika (np. poprzez środowisko IDE) Ponieważ aplikację można uruchomić wielokrotnie, może dojść do sytuacji, kiedy aktywne będą liczne instancje programu źródło problemów dla niedoświadczonych użytkowników 19
Struktura programu Java Klasa Klasa Pakiet metoda main() Pakiet Klasa Pakiet Projekt20
Klasa podstawowa jednostka programu Java Klasa składa się z pól oraz metod 21
Pola i metody klasy Pola klasy (syn. atrybuty, właściwości) opisują jej charakterystyki Np. pola klasy Samochód mogą opisywać: Przebieg Pojemność silnika Numer rejestracyjny Metody klasy opisują jej zachowanie Np. metoda Jedź(int odległość) zmienia stan pola Przebieg o wartość przekazaną przez obiekt odległość 22
Metody Metoda w programowaniu samodzielny fragment kodu programu stanowiący logiczną całość (syn. funkcja, procedura, podprogram) Metoda składa się z pojedynczych instrukcji Metoda realizuje określony algorytm tj. ma początek, koniec oraz treść, może posiadać dane wejściowe oraz generować wynik Metoda main() w Java rozpoczyna wykonanie programu 23
Struktura metody w Java void, int, double, string, public protected private dostęp typ zwracanej wartości nazwa ( argumenty (parametry) ) { instrukcja ; } 24
Obiekty klasy Klasa jest szablonem do tworzenia obiektów klasy w czasie wykonania programu (syn. instancje, egzemplarze) Wszystkie obiekty klasy posiadają identyczny zbiór pół, ale wartości każdego pola mogą być inne Np. obiekty Skoda oraz Fiat klasy Samochód posiadają pole Przebieg, ale jego wartości wynoszą 10000 oraz 15000 odpowiednio Obiekty klasy są tworzone za pomocą instrukcji new Nazwa klasy Nazwa obiektu = new Nazwa klasy ; 25
Pakiet zbiór klas Java Pakiety łączą klasy w jednostki logiczne Pakiet Pojazdy Klasa Samochód Klasa Pociąg Klasa Rower Pakiet ma własną nazwę unikatową w skali programu Nazwy klas w obrębie pakietu nie mogą się powtarzać Klasy w jednym pakiecie są dostępne nawzajem Klasy z innych pakietów nie są dostępne (domyślnie) 26
Biblioteka zbiór pakietów Biblioteka zbiór pakietów klas w postaci pliku Biblioteki są stosowane w celu umożliwienia wielokrotnego wykorzystania kodu Pojazdy Statki Samoloty Transport 27
Rodzaje aplikacji Java Aplikacja konsolowa Aplet Aplikacja GUI Servlet Aplikacja mobilna Strona WWW Usługa 28
Aplikacja konsolowa Konsola - okno tekstowe systemu operacyjnego Wprowadzanie danych klawiatura Wyprowadzanie danych ekran tekstowy w postaci tablicy znaków 29
Kolejność wierszy Ekran aplikacji konsolowej Kierunek wyprowadzania tekstu W i t a m y! \n \n \n Znak końca linii \t \n \n Pozycja kursora (karetki) Tabulator 30
Metoda main Wykonanie kodu programu rozpoczyna się z uruchomienia metody o nazwie main Metoda main może być umieszczona w dowolnej klasie programu Java Aplikacja konsolowa powinna mieć przynajmniej jedną klasę zawierającą metodę main 31
Kolejność wykonania instrukcji Instrukcje w języku Java są wykonywane jedna po drugiej, zgodnie z kolejnością w kodzie Kolejność wykonania może być zmieniona za pomocą: instrukcji warunkowych, Instrukcji pętli, podprogramów itp. (o tym będzie dalej) Program konsolowy kończy działanie po wykonaniu ostatniej instrukcji w metodzie main z wyjątkiem sytuacji awaryjnych (Exceptions) oraz aplikacji wielowątkowych 32
Nazewnictwo obiektów w programie Java Nazwa obiektu jest ciągiem dopuszczalnych znaków z alfabetu języka programowania Nazwa nie może zaczynać się od liczby! Nazwa nie może zawierać spacji! Nazwa może zawierać wybrane znaki specjalne, np. podkreślenie 33
Wyświetlanie danych na ekranie Aplikacja konsolowa wyświetla dane w postaci tekstowej za pomocą metody print lub println obiektu System.out Argumentem metody może być liczba całkowita, tekst, lub inny obiekt w programie posiadający możliwość przekształcenia na ciąg znaków Instrukcja println po ukończeniu wyświetlania ustawia kursor w pierwszej pozycji następnego wiersza (sufiks ln skrót z ang. Line) 34
Zasady wyświetlania obiektów różnych typów Tekst zawsze wyświetlamy w cudzysłowie: System.out.println("Ala ma kota"); Liczby oraz pozostałe typy danych wyświetlamy bez cudzysłowu: System.out.println( 3.1457 ); Zmienne oraz inne obiekty posiadające własną nazwę w programie zawsze wyświetlamy bez cudzysłowu System.out.println( X ); System.out.println( Math.Pi() ); 35
Formatowanie tekstu Wybrane znaki specjalne formatujące tekst: \n przejście do następnego wiersza \t tabulator 36
Średnik - znak końca instrukcji Każda instrukcja w języku Java kończy się średnikiem Instrukcje złożone mogą się rozciągać na kilka(naście) linijek kodu źródłowego oraz zawierać włożone instrukcje średnik stawia się na końcu! Średnik nie jest wymagany w niektórych sytuacjach kiedy złożona instrukcja kończy się nawiasem klamrowym (if, while). Postawienie średnika w niewłaściwym miejscu może mieć skutki katastrofalne -> np. jedna instrukcja złożona w ten sposób się podzieli na kilka prostych, poprawnych z punktu widzenia języka ale zupełnie bezsensownych 37
Nawiasy klamrowe {... } Nawiasy klamrowe są stosowane w celu grupowania instrukcji należących do: Klasy Funkcji Instrukcji złożonej (warunek, pętla, etc.) Wyjątku itp. Każdy nawias klamrowy otwierający grupę instrukcji, powinien mieć odpowiedni nawias zamykający (!) 38
Pytania kontrolne Na jakich platformach sprzętowo-programowych działają programy napisane w Java? Na czym polega koncepcja maszyny wirtualnej Java? Jakie są zalety i wady takiego podejścia? Co to jest kompilacja? Czym skutkuje popełnienie błędu składniowego (gramatycznego) w kodzie programu Java? Program nie kompiluje się. Jaka może być przyczyna tego i co należy zrobić? Program uruchamia się ale nie działa zgodnie z założeniami. Z jakiego rodzaju błędem mamy do czynienia? Jak mogę przyspieszyć znalezienie błędu semantycznego w kodzie programu? 39
Pytania kontrolne (c.d.) Na czym polega koncepcja programowania obiektowego? Co to jest klasa i z czego się składa? Co to jest metoda klasy? Do czego służą pola klasy? Do czego w kodzie programu Java stosuje się średnik? Kiedy można nie stosować średnika? Czy za pomocą pojedynczej instrukcji println() można wyświetlić na ekranie kilka linijek tekstu? 40