Java - wprowadzenie Programowanie Obiektowe Mateusz Cicheński
O języku Czym jest Java Cechy charakterystyczne języka Przykładowe zastosowania Składnia języka Podstawowe typy Wybrane słowa kluczowe Plan zajęć
Czym jest Java?
Java jest prosta! public class HelloWorld { public static void main(string[] args) { System.out.println("Hello world!"); } } Nie ma w niej: plików nagłówkowych i preprocesora, operacji arytmetycznych na wskaźnikach, struktur, unii, dziedziczenia wielobazowego, wzorców, niejawnej konwersji typów etc. Cechy charakterystyczne
Java jest zorientowana obiektowo! klasy i interfejsy! aplikacja to zbiór komunikujących się poprzez odpowiednie interfejsy klas kod źródłowy jest czytelniejszy i łatwiejszy w utrzymaniu i rozwoju oczywiście wszystko zależy od programisty! Cechy charakterystyczne
Java jest niezależna od architektury! Kompilator języka Java (ByteCode) Maszyna wirtualna Javy (interpreter lub JIT compiler) HelloWorld.java HelloWorld.class Hello world! Cechy charakterystyczne
Java jest wielowątkowa! wątki Javy w miarę możliwość są przekładane na wątki systemu wsparcie dla operacji synchronizacji (np. sekcja krytyczna) pomiędzy wątkami typy danych thread-safe bezpieczne w użyciu dla wielowątkowych aplikacji Cechy charakterystyczne
Java nadzoruje pamięć! brak wskaźników dostęp do obiektów przez referencje zarządca pamięci GarbageCollector zwalnia pamięć zajętą przez nieużywane obiekty osobny wątek obiekty przypisywane są do kolejnych epok życia lub usuwane w przypadku braku odniesień do tych obiektów Cechy charakterystyczne
Java jest odporna na błędy i bezpieczna! ściśle określona forma kodu pośredniego kontrola dostępów do pamięci obsługa błędów przez wyjątki ograniczenie dostępu do zasobów (sandbox) Cechy charakterystyczne
Java jest szybka! jak na język interpretowany ;) wolniejsza od języków kompilowanych do native code JVM może kompilować bytecode do natywnego kodu żeby poprawić efektywność szybkość może nie mieć znaczenia jeśli mamy sporo operacji blokujących działanie programu (komunikacja sieciowa, czekanie na interakcję z użytkownikiem) Cechy charakterystyczne
Java jest rozszerzalna i dynamiczna! liczne biblioteki rozszerzające możliwości języka (w tym także napisane w innym języku) możliwość załadowania brakujących bibliotek w trakcie działania aplikacji Cechy charakterystyczne
Realizacja projektów na studia Implementacja strony serwerowej aplikacji (tzw. backend) Implementacja platform developerskich (JavaFX) Oprogramowanie urządzeń mobilnych (Android) Tworzenie aplikacji webowych (skalowalne, stabilne i niezawodne) Przykładowe zastosowania
Bardzo podobna do języka C++ Różnice w notacji, np.: C++: class A : public B Java: class A extends B Język zorientowany obiektowo, więc przykładowo nie możemy zmieniać widoczności metod/pól obiektu, po którym dziedziczymy, bo ograniczylibyśmy jego możliwości (innymi słowy obiekt klasy A musi dostarczać tego samego interfejsu co obiekty klasy B, ale może go rozszerzać) Składnia języka
Typy pierwotne boolean, byte, short, int, long, char, float, double Typy referencyjne klasy (w tym także Boolean, Integer etc.) interfejsy tablice null obiekt bez typu (trivia: I call it my billion-dollar mistake., Tony Hoare) Podstawowe typy danych
abstract =0; w C++ import #include<> w C++ interface oznaczenie interfejsu package oznaczenie pakietu (analogicznie do namespace w C++) super wywołanie konstruktora klasy nadrzędnej (lub metody tej klasy jeśli jest ona przeciążona przez klasę potomną) volatile wymusza sprawdzenie wartości w pamięci zamiast pobrania jej z cache wątku Wybrane słowa kluczowe
assert testowanie założeń programu instanceof sprawdzenie czy obiekt jest wystąpieniem danej klasy implements wskazanie implementowanych interfejsów synchronized wskazanie sekcji krytycznej dla kodu wielowątkowego transient wskazanie pól nieserializowanych Wybrane słowa kluczowe c.d.
Pytania? http://bit.ly/oop2015
Tematy projektów Java Programowanie obiektowe Mateusz Cicheński
Projekt z Javy składa się z dwóch etapów: Realizacja wybranej przez siebie gry dla dwóch graczy Napisanie sztucznej inteligencji w celu maksymalizacji wyniku / wygrania gry Zespół składa się z ~5 osób. Pierwszy etap jest realizowany wspólnie, drugi etap indywidualnie. Opis projektu
Terminy realizacji: Do 7 grudnia 2015 podział na grupy i wybranie tematów Do północy, 21 grudnia 2015 przesłanie sprawozdania (i najlepiej działający prototyp) Do dnia 18 stycznia 2016 przesłanie działającej aplikacji oraz indywidualnych algorytmów (ewentualnie paczki z algorytmami grupy wraz z grą) i oddanie projektów w trakcie zajęć tego dnia Harmonogram
Finalny projekt etapu pierwszego powinien zawierać: Kod źródłowy aplikacji Uruchamialny plik.jar Sprawozdanie Imiona i nazwiska twórców Podział pracy nad aplikacją na członków zespołu (najlepiej w postaci wykonanych zadań) Opis działania aplikacji Projekt algorytmu etapu drugiego to: Kod źródłowy zaimplementowanego algorytmu Sprawozdanie opisujące strategię Wymagania
Zespół powinien podzielić się na następujące role: Kierownik projektu jest odpowiedzialny za komunikację z prowadzącym i wyjaśnianie wszelkich wątpliwości Projektanci aplikacji [2 osoby] ich zadanie to przygotowanie projektu aplikacji diagram klas/interfejsów wraz z umiejętnością wytłumaczenia co/jak/dlaczego zostało zrealizowane Programiści [2 osoby] Programista GUI jest odpowiedzialny za przygotowanie graficznego interfejsu dla aplikacji (Projektanci aplikacji powinni uwzględnić jego potrzeby!) Sposób realizacji
Programiści Prowadzący Kierownik/programista GUI Projektanci Przykład podziału na role
Sprawozdanie Czy posiada wszystkie wymagane elementy? Dokładność opisu aplikacji i późniejsza zgodność z przedstawionym projektem Realizacja projektu Czy aplikacja działa? Rozliczenie poszczególnych osób względem ich zadań i wykonania (specyficzne dla ról) Dodatkowe punkty za pozycję w rankingu po wykonaniu turnieju każdy z każdym w ramach danego zespołu Oceniane aspekty