Podstawy otwartych języków programowania Język Java



Podobne dokumenty
Programowanie obiektowe

Programowanie obiektowe

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Multimedia JAVA. Historia

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Java jako język programowania

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie obiektowe

Programowanie w Internecie. Java

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Tworzenie aplikacji w języku Java

Dokumentacja do API Javy.

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie obiektowe zastosowanie języka Java SE

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Programowanie obiektowe. Wprowadzenie

1 Atrybuty i metody klasowe

Programowanie obiektowe

2. Składnia, środowisko i konwencje w Javie

Programowanie wieloplatformowe w Java

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Platformy Programistyczne Podstawy języka Java

Java Język programowania

Podstawy Języka Java

Programowanie obiektowe

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Wykład 2: Podstawy Języka

Podstawy otwartych języków programowania Przechowywanie danych

Java w 21 dni / Rogers Cadenhead. Gliwice, cop Spis treści. O autorze 11. Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA

Wykład 5 Okna MDI i SDI, dziedziczenie

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Wykład 4: Klasy i Metody

Wykład 7: Pakiety i Interfejsy

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

WPROWADZENIE DO JĘZYKA JAVA

Programowanie obiektowe

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Polimorfizm. dr Jarosław Skaruz

Enkapsulacja, dziedziczenie, polimorfizm

Podstawy języka Java. przygotował:

Technologie i usługi internetowe cz. 2

Wstęp do programowania w języku Java

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Definiowanie własnych klas

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Podstawowe części projektu w Javie

Wprowadzenie do języka Java

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

WPROWADZENIE DO JĘZYKA JAVA

Języki i metody programowania Java INF302W Wykład 2 (część 1)

JAVA. Tomasz Grzywacz.

Programowanie obiektowe

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Kurs WWW. Paweł Rajba.

Programowanie obiektowe - 1.

Ćwiczenie 1. Przygotowanie środowiska JAVA

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Języki i metody programowania Java INF302W. Wykład 1 (część 1) na podstawie Autor Dr inż. Zofia Kruczkiewicz

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Dziedziczenie. Tomasz Borzyszkowski

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Aplikacje w środowisku Java

Programowanie aplikacji na urządzenia mobilne

Programowanie w Javie cz. 1 Wstęp. Łódź, 24 luty 2014 r.

Programowanie obiektowe

Wstęp do programowania w języku Java

Java Platform Micro Edition

Programowanie urządzeń mobilnych

Podstawy programowania obiektowego w języku Java dla programujących w C++

Definicje klas i obiektów. Tomasz Borzyszkowski

Klasy abstrakcyjne i interfejsy

Języki i metody programowania Java. Wykład 2 (część 2)

KOTLIN. Język programowania dla Androida

PARADYGMATY PROGRAMOWANIA Wykład 4

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie Multimediów JAVA. wprowadzenie do programowania (2/3) [1]

Programowanie w języku Java

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Programowanie obiektowe

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Dziedziczenie. dr Jarosław Skaruz

Programowanie obiektowe

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Transkrypt:

Podstawy otwartych języków programowania Język Java Wiktor Wandachowicz

Platforma Java Stworzona przez Sun Microsystems, Inc. J2SE Java 2 Standard Edition (platforma ogólnego przeznaczenia/desktop) J2EE Java 2 Enterprise Edition (specyfikacja bibliotek do pracy na serwerze) J2ME Java 2 Micro Edition (platforma dla urządzeń przenośnych) Dostępna dla systemów Solaris, Linux, Mac OS, Windows, *BSD i innycha

JVM (Java Virtual Machine) Java jest językiem kompilowanym (np. kompilatorem javac), gdzie kodem wynikowym jest tzw. kod bajtowy (bytecode). Kod bajtowy jest interpretowanyprzez maszynę wirtualną Javy (np. program java). Jest on również przenośny, ponieważ nie zależy od systemu operacyjnego, typu procesora, itp. Write Once, Run Anywhere

Obowiązki JVM Izolacja od systemu operacyjnego. Ładowanie klas do pamięci (dynamicznie). Przydzielanie pamięci. Automatyczne zwalnianie pamięci, odśmiecanie (garbage collection). Zarządzanie wątkami. Zarządzanie abstrakcjami systemu operacyjnego (pliki, strumienie we/wy). Integracja z systemem okienkowania (GUI).

Biblioteki Javy Mnóstwo gotowych elementów. Możliwość łatwego użycia dodatkowych bibliotek. Podział na pakiety, np. elementy podstawowe w pakiecie java.lang elementy pomocnicze w pakiecie java.util obsługa GUI w java.awt, java.awt.event, javax.swing obsługa appletów w pakiecie java.applet strumienie we/wy w pakiecie java.io obsługa JDBC w pakiecie java.sql obsługa XML w pakiecie java.xml obsługa sieci w pakiecie java.net

JRE i JDK Java Runtime Environment JVM oraz biblioteki uruchomieniowe zależne od systemu operacyjnego, pozwalające na uruchamianie gotowych programów Javy. Java Development Kit podstawowe narzędzia programistyczne (kompilator, debugger, narzędzia tworzenia dokumentacji, oraz wiele innych), pozwalające na tworzenie aplikacji.

Tradycyjny model aplikacji JVM Aplikacja konsoli Aplikacja GUI System operacyjny

Aplikacje: konsolowa, GUI public class MyClass { public static void main( String[] args ){ // start applikacji System.out.println("Hello!"); -------------------------------------------------------- import javax.swing.*; public class MyGuiClass { public static void main( String[] args ){ // start applikacji JFrame mainframe = new MyGuiFrame(); mainframe.show(true);

Model działania apletu Przeglądarka WWW JVM SecurityManager Applet System operacyjny

Applet <applet code="basicapplet.class" width="300" height="200"> </applet> -------------------------------------------------------- public class BasicApplet extends java.applet.applet { public BasicApplet(){ // konstruktor minimalny zbiór operacji public void init(){ // kontekst apletu gotowy, wykonanie // jednorazowo całej inicjalizacji public void start(){ // aplet jest wyświetlany przez przeglądarkę public void stop(){ // aplet jest ukrywany przez przeglądarkę public void destroy(){ // zwolnienie wszystkich zasobów

Model działania midletu JVM Aplikacja MIDP application-management software (AMS)

Midlet import javax.microedition.midlet.*; public class BasicMIDlet extends MIDlet { public BasicMIDlet(){ // konstruktor minimalny zbiór operacji protected void startapp() throws MIDletStateChangeException { // wywoływana przy aktywacji MIDletu przez system protected void pauseapp() { // wywoływana gdy system wstrzymuje MIDlet protected void destroyapp( boolean unconditional ) throws MIDletStateChangeException { // wywoływana gdy system usuwa MIDlet

Aplikacja na serwerze JEE JVM Kontener JSP i serwletów Serwlet Strona JSP Kontener J2EE Sesyjny EJB Encyjny EJB System operacyjny

Podstawy otwartych języków programowania Elementy obiektowe Javy Wiktor Wandachowicz

Elementy obiektowe Klasy Interfejsy Hermetyzacja Dziedziczenie Polimorfizm Metody i klasy abstrakcyjne Wyjątki Boxing, unboxing (Java 5,6) W bibliotekach: Kolekcje Obsługa zdarzeń (AWT/Swing) Graficzny interfejs użytkownika Strumienie wejścia / wyjścia...

Programowanie obiektowe Reprezentacja pojęć z dziedziny problemu Cechy podejścia obiektowego: 1. Wszystko jest obiektem 2. Program jest zbiorem obiektów, które poprzez wysyłanie komunikatów mówią sobie co robić 3. Każdy obiekt posiada własną pamięć, na którą składają się inne obiekty 4. Każdy obiekt posiada swój typ 5. Wszystkie obiekty tego samego typu mogą otrzymywać te same komunikaty

Klasy Klasa jest abstrakcyjnym typem danych, definiowanym przez programistę. Jej celem jest reprezentowanie w programie pojęcia istniejącego w dziedzinie problemu, nie zmuszając do używania języka specyficznego dla maszyny. * W programach często potrzebne są również klasy, które nie mają odpowiedników w dziedzinie problemu. Mają charakter pomocniczy (i są bardzo przydatne!)

Obiekt posiada interfejs Nazwa typu Interfejs publiczny Żarówka zapal() zgaś() rozjaśnij() przyciemnij() Interfejs publiczny ustala, jakie żądania można kierować do danego obiektu. Razem z kodem realizującym żądania składa się to na implementację. Żarówka zr = new Żarówka(); zr.zapal();

Obiekt egzemplarz klasy moc jasność Żarówka zapal() zgaś() rozjaśnij() przyciemnij() zr : Żarówka moc = 100 {W jasność = 90 {% z2 : Żarówka moc = 60 {W jasność = 50 {% z3 : Żarówka moc = 200 {W jasność = 0 {% Klasa Obiekty Każdy obiekt przechowuje swój własny stan. Kod obsługujący wszystkie obiekty tej samej klasy jest wspólny. Obiekt wie gdzie jest kod, który go obsługuje.

Nazewnictwo Klasa Pola Metody moc jasność Żarówka zapal() zgaś() rozjaśnij() przyciemnij() Składowe klasy INACZEJ:Pola dane, zmienne składowe (ang. member variables) Metody funkcje składowe (ang. member functionas)

Przykład klasa Żarówka public class Żarówka { private int moc; private double jasność; public Żarówka(double moc) { this.moc = moc; public void zapal() { jasność = 90; public void zgaś() { jasność = 0; public void rozjaśnij() { jasność = (jasność + 10 > 100)? 100 : jasność + 10; public void przyciemnij() { jasność = (jasność - 10 < 0)? 0 : jasność - 10;

Przechowywanie obiektów Obiekty identyfikowane są przez uchwyt (ang. handle), nazywany także referencją (ang. reference). Każdy obiekt musi zostać utworzony, zanim będzie można go użyć (stąd użycie pustego uchwytu powoduje błąd wyjątek). Żarówka zr; // pusty uchwyt zr.zapal(); // BŁĄD!!! // utworzenie obiektu i przypisanie do uchwytu zr = new Żarówka(100); zr.zapal(); // OK. Żarówka zr2 = new Żarówka(60); // utworzenie z przypisaniem zr2.rozjaśnij();

Ukrywanie implementacji (kontrola dostępu) Kontrola tego co jest dostępne z zewnątrz. Zabezpieczenie przed błędami (popsuciem). Słowa kluczowe: private protected public brak składowe niedostępne z zewnątrz klasy dostępne dla klas pochodnych dostępne dla wszystkich dostęp pakietowy ( friendly )

Hermetyzacja Grupowanie danych i metod w klasy jest często nazywane enkapsulacją. Dane + Zachowanie = enkapsulacja W połączeniu z ukrywaniem danych jest często nazywane hermetyzacją. Klasa + Kontrola dostępu = hermetyzacja

Dziedziczenie Pozwala na stworzenie nowej klasy w oparciu o już istniejącą. Rozbudowa o nowe elementy (rozszerzenie funkcjonalności). Zastąpienie niektórych definicji nowymi (zmiana zachowania). Wprowadza relację bycia czymś (np. Okrąg jest Figurą).

Nazewnictwo i oznaczenia waga Zwierzę wydajdźwięk() jedz() śpij() obudźsię() Klasa bazowa (ew. klasa rodzicielska, nadklasa, superclass) <<extends>> Słoń wydajdźwięk() jedz() dziedziczenie Klasa pochodna (podklasa, subclass)

Metody i klasy abstrakcyjne Metoda w klasie może być abstrakcyjna, czyli nie na w klasie treści (ciała) tej metody. Oznaczenie: słowo kluczowe abstract Jeśli choć jedna metoda w klasie jest abstrakcyjna, także i klasa jest abstrakcyjna (również trzeba dodać abstract). Metoda abstrakcyjna musi być zdefiniowana w klasie pochodnej (dziedziczenie). Nie można tworzyć obiektów na podstawie klas abstrakcyjnych.

Interfejsy Interfejs jest podobny do klasy, ale nie zawiera implementacji (ciała) metod, tylko ich zapowiedzi (klasa czysto abstrakcyjna). Interfejsy rozwiązują w Javie problem dziedziczenia jednobazowego Klasa implementuje interfejs przez zdefiniowanie wszystkich metod w nim zawartych. Podobnie jak przy dziedziczeniu: wszędzie gdzie potrzebny jest obiekt typu takiego jak dany interfejs, można użyć obiektu, który ma ten interfejs zaimplementowany.

Nazewnictwo i oznaczenia waga Zwierzę wydajdźwięk() jedz() śpij() obudźsię() <<Interface>> Domowy głaskanie() Interfejs <<extends>> Klasa abstrakcyjna <<implements>> Kotek wydajdźwięk() jedz() głaskanie() implementacja interfejsu Klasa konkretna

Polimorfizm Zmiana zachowania w klasie pochodnej przez przesłonięcie definicji metody bazowej nową wersją. Pozwala traktować obiekt klasy pochodnej jak obiekt obiekt klasy bazowej (wymienialność). Umożliwia pisanie ogólnego kodu działającego niezależnie od konkretnego typu (abstrakcja). Na kod taki nie ma wpływu dodawanie nowych typów (rozszerzalność).

Wyjątki Zintegrowana z językiem obsługa błędów. Można specyfikować różne rodzaje błędów poprzez użycie dziedziczenia pomiędzy klasami wyjątków. Podstawową klasą związaną z obsługą błędów jest java.lang.throwable Istnieją jej dwie główne klasy pochodne: java.lang.exception (najczęściej używana) oraz java.lang.error Obsługa wyjątków poprzez słowa kluczowe throw, catch, finally, throws.

Autoboxing, uboxing (Java 5,6) Automatyczne stosowanie typów opakowujących zamiast typów prostych. Przypisanie wyrażenia typu podstawowego (np. int, double) do zmiennej referencyjnej (np. Integer, Double) nie wymaga ręcznego tworzenia obiektów. Przy odczycie wartości wystarczy zwykłe rzutowanie na typ podstawowy (np. int, double). int i = 5; Integer x = new Integer(i); // stary sposób przypisania int j = x.intvalue(); // stary odczyt wartości Integer y = i; int k = (int) y; // nowy sposób przypisania // nowy odczyt wartości

Podstawy otwartych języków programowania Elementy języka Wiktor Wandachowicz

Typy podstawowe boolean char byte short int long float double Boolean Character Byte Short Integer Long Float Double Tablice Napisy (String) Równoważne im obiektowe typy opakowujące (ang. wrapper types)

Struktury kontrolne Pętle for (inicjalizacja; warunek; zmiana) {... for (obiekt : kolekcja) {... do {... while (warunek); while (warunek) {... Operacje warunkowe if (warunek) {... if (warunek) {... else {... operator? (warunek? gdy_prawda : gdy_fałsz) Instrukcja wyboru switch (wyrażenie) { case wartość:... ; break; default:... ; Obsługa wyjątków try {... catch (wyjątek) {... finally {...

Instrukcje Deklaracja zmiennej, przypisanie int x = 5, y, z = 6; y = x * z; Tworzenie obiektów java.util.random r = new java.util.random(); Osoba o = new Osoba("Jan", "Kowalski"); Wywołanie metody double wynik = Math.pow(2.1, 4); new Obliczenia().run(); Blok instrukcji { /* instrukcje proste */ Komentarze // jednoliniowe /* wieloliniowe */ /** dokumentacyjne Javadoc */

Operatory Matematyczne + - * / % += -= *= /= %= Logiczne &&! Bitowe & ^ = &= ^= << >> >>> Relacyjne ==!= > >= < <= Porównanie dla obiektów (w tym napisy) equals Osoba osoba1 =... ; Osoba osoba2 =... ; if (osoba1.equals(osoba2))... ; String s = "abcd"; if ("defg".equals(s))... ;

Metody Metody statyczne (zawsze dostępne, z poziomu klasy). Metody wirtualne (wymagany obiekt aby móc wywołać). Deklaracja metody: specyfikator dostępu (public, protected, private) typ wyniku (podstawowy, obiektowy klasa, lub void) nazwa parametry (postaci: typ parametru i nazwa) specyfikacja rzucanych wyjątków Wszystkie metody niestatyczne są wirtualne (mogą być dziedziczone i przedefiniowywane w klasach pochodnych). Nie ma czegoś takiego jak wskaźnik do metody. Java 5,6 metody mogą mieć otwartą listę parametrów.

Klasy Podstawowy element organizacji kodu programu. Umieszczane w pakietach (równoważne z podkatalogami). Mogą zawierać klasy wewnętrzne. Na podstawie klas tworzone są obiekty. Typowo nazwa pliku źródłowego (bez rozszerzenia) jest taka sama jak nazwa klasy tam zawartego. Klasa o dostępie publicznym musi być w pliku o takiej samej nazwie i może być tam tylko jedna taka klasa (klasa publiczna).

Tablice Każda tablica jest traktowana jak obiekt. Mogą zawierać dane typów podstawowych jak również typów obiektowych. Mogą być jedno- lub wielowymiarowe. Tablice wielowymiarowe zawierają podtablice mniejszego wymiaru. Każdy wymiar tablicy indeksowany jest od [0] (zera). Dla każdego wymiaru tablicy dostępne jest pole length zawierające ilość elementów. Nie można dynamicznie zmieniać rozmiaru tablicy, za każdym razem trzeba tworzyć nową tablicę żądanego rozmiaru (i ewentualnie kopiować dane). Tablica obiektów po utworzeniu zawiera uchwyty puste (null), trzeba więc pamiętać o jej wypełnieniu.

Przykład package biblioteka.dane; public class Autor { private String nazwisko; private Książka[] książki; private int ilośćksiążek = 0; public Autor(String nazwisko, int maxksiążek) { this.nazwisko = nazwisko; książki = new Książka[maxKsiążek]; public void dodajksiążkę(książka k) throws IllegalArgumentException { if (ilośćksiążek < książki.length) { książki[ilośćksiążek++] = k; else { throw new IllegalArgumentException( "przekroczony limit książek: " + książki.length);