Programowanie komponentowe wykład 3

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

Programowanie obiektowe

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

Dokumentacja do API Javy.

Podstawy i języki programowania

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Wykład 8: Obsługa Wyjątków

Multimedia JAVA. Historia

Programowanie obiektowe

Wykład 8: klasy cz. 4

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

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

Języki i techniki programowania Ćwiczenia 2

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

Dziedziczenie. dr Jarosław Skaruz

Języki i paradygmaty programowania (JIPP)

Programowanie obiektowe

Strumienie i serializacja

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

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

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

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

Programowanie obiektowe

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Dziedziczenie. Tomasz Borzyszkowski

Programowanie w Internecie. Java

1 Atrybuty i metody klasowe

Platformy Programistyczne Podstawy języka Java

Podstawy programowania skrót z wykładów:

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

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

Kurs WWW. Paweł Rajba.

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

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Wykład 2: Podstawy Języka

Programowanie Obiektowe Ćwiczenie 4

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

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Wykład 3 Składnia języka C# (cz. 2)

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

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

Podstawowe części projektu w Javie

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Wykład 4: Wejście/wyjście: strumienie Java

Wykład 4: Klasy i Metody

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany

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

Definiowanie własnych klas

Aplikacje w środowisku Java

Wykład 4. Tablice. Pliki

Zaawansowane programowanie w języku C++ Klasy w C++

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania obiektowego

Zmienne, stałe i operatory

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

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

Klasy cd. Struktury Interfejsy Wyjątki

Materiały do zajęć VII

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Wykład 5 Okna MDI i SDI, dziedziczenie

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

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

Programowanie obiektowe

Klasy abstrakcyjne, interfejsy i polimorfizm

1 Podstawy c++ w pigułce.

Java Język programowania

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE

Wykład 2 Składnia języka C# (cz. 1)

Interfejsy i klasy wewnętrzne

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

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

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Pakiety i interfejsy. Tomasz Borzyszkowski

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

Wprowadzanie danych z klawiatury. Wyjątki związane z wprowadzaniem danych, przekroczeniem rozmiaru tablicy, dzieleniem przez zero itd.

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Applety Java. Applety są przykładem kodu Java wykonywanego po stronie klienta, ale bez ujawnionej (jak w przypadku skryptu) wersji źródłowej

Podstawy otwartych języków programowania Wyjątki i strumienie I/O

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

Rok akademicki: 2012/2013 Kod: JFM s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

KOTLIN. Język programowania dla Androida

PARADYGMATY PROGRAMOWANIA Wykład 4

TEMAT : KLASY DZIEDZICZENIE

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Definicje klas i obiektów. Tomasz Borzyszkowski

Transkrypt:

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 bibliotek (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

Programowanie komponentowe wykład 4 Informatyka, IV sem. studia dzienne FTIiMS, PŁ

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. w tym kontekście,,package'' nie jest słowem kluczowym

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

Interfejs... cd. Kurs Tylocha, 2.3.12, 2.3.15 [public] interface InterfejsPrzykl { static int Pole=3; abstract public void Metoda(); } //domyślnie interfejs jest publiczny // użycie interfejsu przez klasę public class MyApplet extends Applet implements InterfejsPrzykl { public void Metoda() { // co robi ta metoda dla tej klasy } }

Klasy wewnętrzne, anonimowe i lokalne Kurs Tylocha, 2.3.7 Klasa wewnętrzna klasa zdefiniowana wewnątrz definicji innej klasy występowała w C/C++ Klasa lokalna klasa zdefiniowana wewnątrz bloku instrukcji (w definicji funkcji) niedopuszczalne w C/C++ Klasa anonimowa klasa zdefiniowana wewnątrz wyrażenia new NazwaKlasyPrzodka(//lista argumentów//) {...} jest to także sposób na dziedziczenie po interfejsach (!!!) niedopuszczalne w C/C++

Różnice... (9 słowo super) Słowo kluczowe super Kurs Tylocha rozdz. 2.3.13 Konstruktory nie posiadają list inicjalizacyjnych odpada operator : oraz inicjalizacja typu pole(wartość) super() wywołuje konstruktor klasy bazowej lub super.funkcja( ) - wywołuje funkcję o tej samej nazwie, ale w wersji z klasy bazowej Wywołanie super(...) musi być pierwszą linią kodu konstruktora przykład

Różnice... (9 słowo super, c.d.) Zakładamy hierarchię klas: A, B extends A, C extends B Słowa super nie można łączyć kasakadowo; aby odnieść się do nazwy niestatycznej w klasie wyższej należy konwertować referencję this np. w obiekcie klasy C ((A)this).get(); Konwersja this do klasy-przodka jest równoznaczna z super w obiekcie klasy C: ((B)this).get(); = super.get();

Programowanie komponentowe wykład 5 Informatyka, IV sem. studia dzienne FTIiMS, PŁ

Błędy w programach Z punktu widzenia kodu rozróżniamy Bł. kompilacji błąd składni w kodzie programu, Nieznana zmienna/funkcja/klasa/... Brak nawiasu/średnika/... Bł. logiczne program działa wbrew oczekiwaniom, ale DZIAŁA np. niepoprawne wyniki obliczeń Nieprzewidziane zachowanie interfejsu Brak możliwości wykonania jakiejś operacji Bł. czasu wykonania (ang. Runtime) program uruchamia się, ale potem zatrzymuje Dzielenie przez zero, indeks tablicy spoza zakresu Błąd otwarcia pliku (ogólnie: operacji we/wy) Odwołanie do niezainicjalizowanej zmiennej obiektowej String x; System.out.println(x);

Wyjątki i błędy w Javie Java oferuje bardzo rozbudowany, ściśle zorientowany obiektowo mechanizm obsługi sytuacji krytycznych (błędy we/wy, alokacji pamięci, braku zasobów, błędnych operacji itd.) Sytuacje wyjątkowe dzielimy na dwa rodzaje Errors błędy Exceptions wyjątki Błędy sytuacje rzadkie, związane z działaniem JVM, np. brak pakietu lub klasy, opór środowiska, poważny błąd systemowy Błędy nie powinny być obsługiwane w zwykłych programach Javy, ich wyrzucaniem zajmuje się watek JVM uruchamiający ''nasze'' programy np. java.lang.noclassdeffounderror brak klasy z funkcją main w bieżącym/wskazanym katalogu Zadanie na kolokwium: napisz kod wywołujący wyjątek X

Wyjątki i błędy hierarchia klas

Wyjątki... cd Kurs Tylocha, rozdz. 2.4 Wyjątki sytuacje zazwyczaj możliwe do obsłużenia instrukcją if..else, np. nie znaleziono pliku FileNotFoundException indeks poza granicami tablicy ArrayIndexOutOfBoundsExcetion referencja wskazująca na pusty obszar pamięci NullPointerException Błąd operacji arytmetycznej ArithmeticException

Wyjątki RuntimeExceptions Mogą występować bardzo często, nawet po kilka w jednym wyrażeniu for (i=0; i<10; i++); tab[ i ] = i; Ich obsługa nie jest przez kompilator wymagana zbyt duży koszt sprawdzenia w porównaniu do strat spowodowanych przez taki wyjątek NullPointerException ArrayIndexOutOfBoundsException ArithmeticException W momencie wystąpienia RuntimeException program zatrzyma się i pokaże nazwę wyjątku oraz miejsce jego wystąpienia przykład

Wyjątek jako obiekt Każda sytuacja wyjątkowa jest reprezentowana przez obiekt pewnej klasy Każdy pakiet dysponuje odpowiednim zestawem wyjątków obsługującym błędy wywołane przez jego klasy/funkcje przykłady z dokumentacji Można także we własnych pakietach definiować własne wyjątki, pod warunkiem, że dziedziczą one z klasy Throwable

Jak powstaje wyjątek? Słowa kluczowe throw,throws Wyjątek trzeba najpierw zgłosić public void funkcja() throws MyException { //... if (WystapilBlad) throw new MyException(); //... new MyException zwraca referencję do obiektu zawierającego dane o sytuacji wyjątkowej, np. kod błędu, treść komunikatu, itp.

Obsługa wyjątków Metoda try-catch-finally try { // instrukcja generująca wyjątek } catch (NazwaKlasyWyjątku wyj) { // co zrobić z tym wyjątkiem}... finally {//blok wykona się niezależnie od wystąpienia wyjątku}

Kolejność obsługi wyjątków (1) Jeśli wyjątki są w różnych blokach kodu o kolejności decyduje przebieg sterowania, np. try { // instrukcje generujące wyjątki } catch (IOException io) {System.err.println("blad IO");} try { // instrukcje generujące wyjątki } catch (SecurityException se) {System.err.println("blad sec");

Kolejność obsługi wyjątków (2) Jeśli wyjątki występują w tym samym bloku o kolejności decyduje hierarchia dziedziczenia: od najbardziej szczegółowego do najbardziej ogólnego, czyli ''od dołu do góry, poźniej try { //... instrukcje generujące wyjatki } catch (java.io.objectstreamexception) { } catch (java.io.ioexception) { } catch (java.lang.exception){ }...

Porównanie if-else i try-catch int otwórzplik(ścieżka) { if ( plik.otwórz() == false) {błąd otwarcia pliku} else if ( przydzielpamięć(plik.długość) ==false) {brak pamięci} else if (zapiszdopliku(tekst) == false) {błąd wyjścia} else if (zamknijplik() == false) { obsłuż ten błąd} else return OK ; }

Porównanie if-else i try-catch readfile { try { otwórz plik; przydziel dla niego pamięć; wczytaj tekst do pliku ; zamknij plik; } catch (fileopenfailed) { zrób coś z tym; } catch (memoryallocationfailed) { zrób coś z tym; } catch (writefailed) { zrób coś z tym; } catch (fileclosefailed) { zrób coś z tym; }}

Definiowanie własnego wyjątku class MyException extends Exception { String msg; MyException() { msg = new String ( komunikat wyjatku );} } Większość możliwych wyjątków jest już zdefiniowana w pakietach Własne wyjątki służą do zgłoszenia np. sytuacji wyjątkowej we własnej klasie wyjątku odziedziczonego po istniejącym

Programowanie komponentowe wykład 6 Informatyka, IV sem. studia dzienne FTIiMS, PŁ

Standardowe struktury danych Pakiety Javy zawierają b. dużą ilość gotowych do użycia w kodzie klas struktur danych Np. pakiet java.util klasy reprezentujące dynamiczne struktury danych klasy obsługujące kalendarz, datę, walutę, słownik klasy obsługujące struktury kontenerowe, itp. Apel: zanim zaczniesz tworzyć nową klasę PRZEJRZYJ DOKUMENTACJĘ PAKIETÓW!!! 9 przypadków na 10 jest już oprogramowanych

Klasy String i StringBuffer java.lang.string reprezentuje łańcuchy tekstowe w miejsce tablicy char[ ] (lub C/C++: char*) 11 konstruktorów, w tym kopiujące compareto(), comparetoignorecase(), concat(), equals(object), replace(), replaceall, trim(), valueof() String jest klasą final ponadto zapisanego w niej tekstu nie można zmienić! Do modyfikacji tekstu służy klasa java.lang.stringbuffer należy stworzyć jej obiekt zainicjowany Stringiem przetworzyć tekst metodami klasy StringBuffer rezultat zapisać od nowa w obiekcie String

Klasa Vector Klasa reprezentująca tablicę obiektów pochodzących od java.lang.object java.lang.object // sam Vector też pochodzi od Object... +--java.util.abstractcollection +--java.util.abstractlist +--java.util.vector Funkcje obsługujące dane: add(object), add(collection), add(int index, Object) set(), setelementat(object, int), setsize(int) clear(), remove(object), removeall(), trimtosize(int) clone(), tostring(), toarray(), equals(object)

Klasa java.util.stack Klasyczny stos pozwala tylko na kładzenie elementów na górze i ich zdejmowanie z góry Rozszerzone implementacje stosu umożliwiają również podglądanie elementów lub ich sprawdzanie Klasa Stack jest rozszerzoną implementacją stosu Dziedziczy od Vector Funkcje: boolean empty(); pop(object), push(object), boolean search(object), peek()

Klasa Arrays Jeśli nie chce się przekształcać własnych tablic w obiekty z biblioteki Java......można użyć funkcji z klasy Arrays; reprezentuje ona (w postaci funkcji statycznych) najczęstsze operacje na gotowych tablicach sortowanie 20 funkcji sort() porównywanie elementów 9 funkcji equals() wyszukiwanie 9 funkcji binarysearch() wypełnianie funkcje fill() Funkcje te przyjmują daną tablicę jako argument (inaczej niż zazwyczaj jest w Javie) dokumentacja

Obiekt Date Do działania na datach klasa Date Java 1.1, później klasa Calendar Obiekt klasy Date reprezentuje dowolny moment czasowy z dokładnością do milisekund Na 64 bitach (long) zapamiętuje liczbę milisekud, które upłynęły od 1 stycznia 1970 roku, od godz. 0h 00m 00s 000ms (tzw. moment epoch) Daty wcześniejsze zapamiętuje się jako liczby ujemne

Format danych w Date rok liczba c. = y 1900 miesiąc liczba z {0,.., 11}, gdzie 0 = styczeń dzień mies. liczba z {1,.., 31} dzień tyg. liczba z {0,..., 6}, gdzie 0 = niedziela godzina liczba całk. z przedziału <0, 23> minuta liczba całk. z przedziału <0, 59> sekunda liczba całk. z przedziału <0, 61>!!! (sek. przestępne) funkcje getyear(), getmonth(), getdate(), getday(), gethour()...

Konstruktory i funkcje Date Date now = new Date(); alokuje obiekt dokładnie ten moment Date(y, m, d), Date(y, m, d, h, m), Date(y, m, d, h, m, s) Date(long milisecs), Date(String) Brak konstruktora kopiującego Date(Date) dlaczego? now.equals(whenelse), // tendencja do nazw naturalnych now.before(littlebitlater) now.after(littlebitearlier) setdate(), setmonths(), setyear()...

Inne struktury danych Calendar, Currency Dictionary, GregorianCalendar......

Programowanie komponentowe wykład 7 Informatyka, IV sem. studia dzienne FTIiMS, PŁ

Operacje wejścia/wyjścia Operacje we/wy w Javie są reprezentowane przez wyspecjalizowane typy danych w pakiecie java.io Klasa File reprezentacja pliku dyskowego Klasy OutputStream, Writer dokumentacja strumienie wyjściowe abstract Klasy InputStream, Reader strumienie wejściowe abstract Wyjątki i interfejsy

Klasa java.io.file Pola (tylko statyczne) zawierają separatory ścieżek zapisane jako String lub char (są zależne od środowiska) pathseparator, pathseparatorchar Konstruktory tworzą obiekt plik na podstawie Obiektu typu File przykład ścieżki do pliku i/lub katalogu Konstruktory nie generują wyjątków......bo nie działają na dysku, tylko na strukturze w pamięci RAM Do stworzenia pliku na dysku: createnewfile() throws IOException, SecurityException

Klasa java.io.file(2) Funkcje składowe tworzenie i usuwanie plików i katalogów createtempfile, exists, delete, mkdir, mkdirs sprawdzanie istnienia i właściwości plików canread, canwrite, ishidden, isfile, isdirectory, length ustawienia własności plików setreadonly, setlastmodified, renameto porównywanie z innymi obiektami tego typu compareto(file), compareto(object), equals Wyjątki generowane przez metody klasy File SecurityException, IOException, NullPointerException, IllegalArgumentException

Strumień: medium transmisji danych (Podział strumieni ze względu na miejsce w hierarchii dziedziczą po java.lang.object) do programu, wejściowe InputStream z programu, wyjściowe OutputStream tekst do programu Reader tekst z programu Writer Są to klasy abstrakcyjne przeznaczone do dziedziczenia przez strumienie wyspecjalizowane

Strumienie wejściowe Strumienie dziedziczące po InputStream mogą pobierać dane z: Tablica obiektów Obiekt String Plik Pipe potok Sekwencja innych strumieni połączonych w jeden Inne źródła (np. połączenie internetowe)

Strumienie wejściowe InputStream

Strumienie wyjściowe Program w RAM może formatować dane wyjściowe w postaci Tablicy bajtów (oprócz String) Pliku Potoku (pipe)

Strumienie wyjściowe OutputStream

Strumienie podział (typ) Podział strumieni ze względu na przesyłane dane Bajtowe służą do zapisu/odczytu ciągów bajtów niefiltrowane ciągi bajtów nie mają interpretacji np. pliki *.class, pliki z obrazkami filtrowane bajty są interpretowane jako dane pewnych typów prostych, np. long, int, short w tym strumienie buforowane Obiektowe zapis/odczyt obiektów typów złożonych Znakowe szczególny przypadek strumieni obiektowych/filtrowanych, ale reprezentowane przez klasy Reader i Writer służą do pracy z tekstem reprezentowanym jako String lub char[ ]

Strumienie bajtowe niefiltrowane ByteArrayInputStream,ByteArrayOutputStreamFileInp utstream, FileOutputStream Podstawowe metody: close zamyka strumień finalize do zamykania w przypadku destrukcji obiektu write/read(byte[ ] b) write/read(byte[ ] b, int off, int len) write/read(int b)

Strumienie bajtowe filtrowane Są to strumienie FilterInputStream i FilterOutputStream i/lub ich pochodne DataInputStream oraz DataOutputStream filtrowane strumienie bajtowe (strumienie danych) odczytywanie typów int, float itp. mają jedno pole (in, out) zapisana nazwa aktualnego strumienia tworzy się je na podstawie strumienia typu Input lub Output podanego jako argument w jedynym konstruktorze readdouble, readint, readchar, readfloat writedouble, writeint, writechar, writefloat także metody read/write ze strumieni niefiltrowanych

Strumienie bajtowe buforowane Są szczególnym przypadkiem strumieni Filter BufferedInputStream, BufferedOutputStream Pola protected byte[ ] buf bufor protected int count liczba bajtów w buforze BufferedInputStream(InputStream) tworzy buforowany strumień wejściowy dla strumienia InputStream (analogicznie: Output) BufferedInputStream(InputStream, int) jw. z buforem o rozmiarze int (analogicznie: Output) Metody tylko read/write Brak możliwości zapisu zinterpretowanych bajtów do bufora!

Strumienie obiektowe ObjectOutputStream serializacja obiektów Javy jako serii typów prostych ObjectInputStream odczytywanie ciągów danych typów prostych jako obiektów defaultwriteobject, defaultreadobject, writeobject, readobject, replaceobject, readtyp Każdy typ wbudowany ma swój odpowiednik w postaci klasy o podobnej nazwie (int - Int) w pakiecie java.lang

Strumienie znakowe FileReader (FileWriter) strumień do odczytywania (zapisywania) znaków zapisanych w pliku konstruktory jako argument przyjmują parametr klasy File Strumień ten dziedziczy po InputStreamReader (InputStreamWriter), w którym dostępna jest jeszcze funkcja read (write) do pracy na pojedynczych bajtach lub ich tablicach. konstruktor InputStreamReader (OutputStreamReader) przyjmuje jako parametr obiekt typu InputStream (OutputStream) PrintWriter strumień do współpracy z konsolą i/lb drukarką szereg funkcji wyspecjalizowanych w wydruku

Strumienie znakowe wejściowe Reader

Strumienie znakowe wyjściowe Writer