1 / 35

Podstawowe aspekty programowania w Javie

emiko
Télécharger la présentation

Podstawowe aspekty programowania w Javie

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


    1. Podstawowe aspekty programowania w Javie Michal Kuciapski m.kuciapski@univ.gda.pl

    2. Celem przedmiotu jest ukazanie podstawowych elementw skladni jezyka programowania Java wraz z wykazaniem praktycznego ich zastosowania w tworzeniu aplikacji konsolowych, na podstawie rozbudowanego przykladu przy wsparciu ze strony technik analizy i projektowania obiektowego.

    3. Programowanie obiektowe

    4. Programowanie obiektowe Koncepcja, korzysci i podstawowe pojecia

    5. 5 z 137 Koncepcja programowania obiektowego Programowanie obiektowe zaklada tworzenie oprogramowania skladajacego sie ze spolecznosci obiektw, ulozonych w hierarchiczne struktury i potrafiacych komunikowac sie ze soba poprzez przesylanie wiadomosci, dla realizowania celw systemu. Programowanie obiektowe czerpie swoja koncepcje z rzeczywistego swiata otaczajacego nas skladajacego sie z olbrzymiej ilosci obiektw, jak np.: ludzie, budynki i struktur, jak np. organizacje.

    6. 6 z 137 Koncepcja programowania obiektowego

    7. 7 z 137 Korzysci programowania obiektowego dlaczego?

    8. 8 z 137 Podstawowe pojecia obiektowosci

    9. 9 z 137 Podstawowe pojecia obiektowosci

    10. 10 z 137 Paradygmat obiektowy Opanowywanie zlozonosci (dziedziny) problemu opiera sie na powszechnie stosowanych zasadach: rozrznianie poszczeglnych obiektw tworzenie pojec - laczenie obiektw w klasy znajdowanie zaleznosci miedzy pojeciami - klasami, wyprowadzanie nowych okreslanie relacji miedzy obiektami

    11. Programowanie obiektowe Klasy i obiekty

    12. 12 z 137 Klasa definicja i koncepcja Klasa opis obiektu lub obiektw z jednolitym zbiorem atrybutw i uslug, zawierajacy opis tworzenia nowych obiektw w klasie. Klasa = wsplne wlasnosci + wsplne zachowania Klasy dla umozliwienia pisania programw tak, jak rozwazany problem sa zoorganizowane w struktury, co zapewnia: stabilnosc , przejrzystosc, zrozumialosc i wielokrotna wykorzystywalnosc kodu.

    13. 13 z 137 Klasa przyklad struktury

    14. 14 z 137 Definiowanie klasy wersja uproszczona class NazwaKlasy { //pola typ_zmiennej zmienna; // konstruktor - metoda o tej samej nazwie co klasa wywolywana automatycznie // przy tworzeniu obiektu danej klasy NazwaKlasy (typ_argumentu nazwaAgrumentu){ tresc konstruktora } // metody typ_zwracanej_wartosci nazwaMetody (typ_argumentu nazwaAgrumentu [,]){ tresc metody } } //koniec definicji klasy

    15. 15 z 137 Definiowanie klasy wersja kompletna [modyfikatory] class NazwaKlasy [extends NazwaNadklasy] [implements NazwyInterfejsw] { //pola [modyfikatory] typ_zmiennej zmienna; // konstruktor - metoda o tej samej nazwie co klasa wywolywana automatycznie // przy tworzeniu obiektu danej klasy NazwaKlasy (typ_argumentu nazwaAgrumentu [,]){ tresc konstruktora } // metody [modyfikatory] typ_zwracanej_wartosci nazwaMetody (typ_argumentu nazwaAgrumentu [,]){ tresc metody } } //koniec definicji klasy

    16. 16 z 137 Definiowanie klasy modyfikatory

    17. 17 z 137 Definiowanie klasy abstract i final

    18. 18 z 137 Definiowanie klasy przyklady deklaracji Public: public class Nauczyciel {definicja} public class Nauczyciel extends Osoba {definicja} Bez modyfikatora dostepu: class Nauczyciel {definicja} Abstract: abstract class FiguraPlaska {definicja} public abstract class Osoba {definicja} Final: public final class Math extends Object {definicja}

    19. 19 z 137 Definiowanie klasy przyklady definicji

    20. 20 z 137 Definiowanie klasy przyklady definicji

    21. 21 z 137 Definiowanie klasy przyklady definicji public class Klient { public static int wiek; public static byte iloscLat = 26; public static miesiaceZycia(byte lata) { return lata * 12; } public static void main(String[] args) { wiek = miesiaceZycia(iloscLat); System.out.writeln(wiek); } }

    22. 22 z 137 Klasy dziedziczenie - definicja i koncepcja Dziedziczenie - jest operacja polegajaca na utworzeniu nowej klasy na bazie klasy juz istniejacej. Nowa klasa nosi podklasy (ang. subclass), a klasa z ktrej dziedziczy nazwe nadklasy (ang. superclass). Podklasa jest uszczeglowieniem nadklasy. Dziedziczenie polega na przejeciu pl i metod z jednej klasy (nadklasy) przez druga klase (podklase). Zwiazek dziedziczenia mozna opisac slowem jest np. student jest osoba. Stosowanie dziedziczenia pomaga w praktyce wykorzystywac zasade ponownego uzycia.

    23. 23 z 137 Klasy dziedziczenie - zalozenia Dziedziczenie w jezyku Java: Jest mozliwe wylacznie jednokrotne wylacznie jedna nadklasa; Podczas dziedziczenia sa uwzglednione modyfikatory dostepu i wlasciwosci: Niemozliwe jest dziedziczenie z klas o modyfikatorach: private, final Pola i metody o modyfikatorze dostepu private nie sa dziedziczone; Podczas dziedziczenia sa uwzglednione typy klas niemozliwe jest dziedziczenie z klas lokalnych czy wewnetrznych

    24. 24 z 137 Klasy dziedziczenie - deklaracja [modyfikatory] class NazwaKlasy [extends NazwaNadklasy] extends slowo kluczowe wskazujace, ze klasa dziedziczy pola i metody innej klasy NazwaNadklasy nazwa klasy, z ktrej klasa dziedziczy pola i metody Przyklady: public class Student extends Osoba class Analiza extends Applet

    25. 25 z 137 Klasy dziedziczenie - przyklady

    26. 26 z 137 Klasy dziedziczenie - przyklady

    27. 27 z 137 Klasy dziedziczenie - przyklady

    28. 28 z 137 Typy klas

    29. 29 z 137 Typy klas przyklady klasa wewnetrzna public class Test { private int m_nLiczba = 0; private Licznik licznik; public static void main(String args[]) { Test test = new Test(); test.licznik = test.new Licznik(); test.licznik.dodaj(); System.out.println("Licznik = " + test.licznik.wez()); } class Licznik { public int wez() { return m_nLiczba; } public void dodaj() { m_nLiczba++; } }// koniec definicji klasy wewnetrznej Licznik }// koniec definicji klasy zewnetrznej Test

    30. 30 z 137 Typy klas przyklady klasa lokalna public class Test { private int m_nLiczba = 0; public static void main(String args[]) { final Test test = new Test(); class Licznik { int wez() {return test.m_nLiczba; } void dodaj() {test.m_nLiczba++; } }; Licznik licznik = new Licznik(); licznik.dodaj(); System.out.println("Licznik = " + licznik.wez()); } }

    31. 31 z 137 Typy klas przyklady klasa anonimowa public class Test { private int m_nLiczba = 0; private Licznik licznik; public static void main(String args[]) { Test test = new Test(); test.licznik.dodaj(); PrintWriter stdout = new PrintWriter(System.out, true); stdout.println("Licznik = "+test.licznik.wez()); } Test() { this.licznik = new Licznik() { public int wez() {return m_nLiczba; } public void dodaj() {m_nLiczba++; } }; } }

    32. 32 z 137 Klasy pakiety definicja i koncepcja Pakiety sa zbiorem klas wydzielonych ze wzgledu na wsplna tematyke i ulozonych hierarchicznie. Organizacja klas w ten sposb umozliwia lepsze ich zarzadzanie i jest odpowiednikiem bibliotek w jezykach proceduralnych. Organizacja klas w pakiety ulatwia znaczaco ich wykorzystanie przy definiowaniu nowych. Mozliwe jest tworzenie wlasnych pakietw jak i dodawanie definiowanych klas do juz istniejacych. Umieszczenie klas w pakiecie jest analogiczne do umieszczenia klas w strukturze katalogw.

    33. 33 z 137 Klasy pakiety przyklady

    34. 34 z 137 Wykorzystanie poprzez wyrazenie: import sciezka_do_pakietu(w); import java.io.*; import java.util.*; Definiowanie poprzez wyrazenie: package sciezka_umieszczenia_pakietu; package figury; package figury.plaskie; Instrukcje zwiazane z pakietami sa umieszczane na poczatku definicji klasy. Klasy pakiety wykorzystanie i definiowanie

    35. 35 z 137 Klasy pola definicja i nazewnictwo Pola danych sa atrybutami klasy, pelniacymi role analogiczna do zmiennych lub stalych, z ta rznica, ze sa widoczne co najmniej w obrebie calej klasy. Pola danych sa one deklarowane na tych samych zasadach, co zmienne lokalne, ale bezposrednio po deklaracji klasy. Dla rozrznienia nazw pl od pozostalych zmiennych nalezy stosowac podczas deklaracji nazwy zgodnie z przyjeta konwencja. Najczesciej uzywa sie przedroskw, jak pol czy atr, np.: polImie, atrImie.

    36. 36 z 137 Klasy pola - deklaracja [modyfikatoryPola] TypPola NazwaPola;

    37. 37 z 137 Klasy pola - przyklady

    38. 38 z 137 Klasy pola - modyfikatory dostepu

    39. 39 z 137 Klasy - pola i metody modyfikatory dostepu

    40. 40 z 137 Klasy pola - modyfikatory wlasciwosci

    41. 41 z 137 Klasy pola - przyklady

    42. 42 z 137 Klasy pola - przyklady class Pole { static int statyczne = 0; } public class Test { Pole pole1 = new Pole(); Pole pole2 = new Pole(); void testujPola() { System.out.println("Wywolanie poprzez klase:" + Pole.statyczne); System.out.println("Wywolanie poprzez obiekt:" + pole1.statyczne); pole2.statyczne = 2; System.out.println("Wywolanie poprzez obiekt:" + pole1.statyczne); Pole.statyczne = 100; System.out.println("Wywolanie poprzez obiekt:" + pole2.statyczne); } }

    43. 43 z 137 Klasy metody definicja i nazewnictwo Metoda jest zbiorem instrukcji (blokiem kodu) przypisanych do jednej przestrzeni nazw majacej wlasciwosc wielokrotnego wykorzystania. Celem metod jest umozliwienie wielokrotnego wywolania tego samego fragmentu kodu poprzez podanie jego nazwy. Metody moga byc definiowane w dowolnym miejscu klasy. Metody nie zwracajace wartosci nosza nazwe procedur, a metody zwracajace wartosci nosza nazwe funkcji.

    44. 44 z 137 Klasy metoda - deklaracja [modyfikatory] TypZwracanejWartosci nazwaMetody([Parametry]) { //tresc metody }

    45. 45 z 137 Klasy metody - modyfikatory dostepu

    46. 46 z 137 Klasy - pola i metody modyfikatory dostepu

    47. 47 z 137 Klasy pola - modyfikatory wlasciwosci

    48. 48 z 137 Klasy metody - przyklady public Nauczyciel dodaj() throws IOException { PobieranieDanych tym = new PobieranieDanych(); tym.dodajNauczyciel(); if (tym.czyPracuje.equals("")) return new Nauczyciel(tym.imie, tym.nazwisko, tym.wiek); else return new Nauczyciel(tym.imie, tym.nazwisko, tym.wiek, tym.pracuje, tym.pensja); }

    49. 49 z 137 Klasy metody - przyklady

    50. 50 z 137 Klasy metody - przyklady public void usuwanieOsoby(ArrayList parOsoba, int parPozycjeWyszukane[]) throws IOException { PobieranieDanych tym = new PobieranieDanych(); if (tym.czyUsunac() == true) { for (int i = 0, wielkoscZmniejszenia = 0; i < this.iloscZnalezien; i++, wielkoscZmniejszenia++) { parOsoba.remove(parPozycjeWyszukane[i] - wielkoscZmniejszenia); } System.out.println("Pozycje skasowane"); } }

    51. 51 z 137 Klasy metody - przeciazenie Przeciazanie metod polega na definiowaniu metod o tych samych nazwach, rozrznianych na podstawie ilosci lub typw parametrw. Umozliwia to wywolanie odpowiedniej metody w zaleznosci od parametrw wywolania. Nie mozliwe jest rozrznianie metod na podstawie zwracanych przez nie typw wartosci. Przeciazanie umozliwia posiadanie definicji szeregu metod wykonujacych rzne instrukcje, ale posiadajace ta sama nazwe. Znaczaco ulatwia to programowanie i poprawia przejrzystosc kodu.

    52. 52 z 137 Klasy metody przeciazenie Przyklad public Prostokat(double parBok1) { atrNazwa = "Kwadrat"; atrBokLubPromien = parBok1; } public Prostokat(double parBok1, double parBok2) { atrNazwa = "Prostokat"; atrBokLubPromien = parBok1; atrBok2 = parBok2; }

    53. 53 z 137 Klasa konstruktor definicja Konstruktor jest metoda wywolywana w trakcie tworzenia obiektu, sluzaca glwnie inicjalizacji wartosci pl obiektu. Konstruktor posiada identyczna nazwe z nazwa klasy i podobnie jak pozostale metody moze byc przeciazany.

    54. 54 z 137 Klasa konstruktor definicja Konstruktor jest metoda wywolywana w trakcie tworzenia obiektu, sluzaca glwnie inicjalizacji wartosci pl obiektu. Konstruktor posiada identyczna nazwe z nazwa klasy i podobnie jak pozostale metody moze byc przeciazany.

    55. 55 z 137 Klasa konstruktor zalozenia Gdy klasa nie posiada zdefiniowanego konstruktora wykonywany jest domyslny konstruktor nadklasy. Za pomoca slowa kluczowego super mozliwe jest wywolanie konstruktora nadklasy. Slowo kluczowe this oznacza odwolanie do aktualnego obiektu.

    56. 56 z 137 Klasa konstruktor przyklad public class Student extends Osoba { public Student (String parImie, String parNazwisko, int parWiek, int parNrIndeksu, double parSrednia) { super(parImie, parNazwisko, parWiek); this.nrIndeksu = parNrIndeksu; this.srednia = parSrednia; } }

    57. 57 z 137 Klasa konstruktor przyklad public abstract class Osoba { protected String imie; protected String nazwisko; protected int wiek; public Osoba () { } public Osoba (String parImie, String parNazwisko, int parWiek) { this.imie = parImie; this.nazwisko = parNazwisko; this.wiek = parWiek; }

    58. 58 z 137 Obiekt definicja i koncepcja Obiekt jest abstrakcja czegos w dziedzinie problemu, odzwierciedlajaca zdolnosci systemu do przechowywania informacji o tym, interakcji z tym czyms, lub obie te rzeczy. Obiekt programistyczny jest modelem rzeczywistego obiektu, np.: student czy nauczyciel. Jest swego rodzaju nowym typem danych. Obiekt jest generowany na podstawie wzorca klasy, bedacej abstrakcja grupy obiektw o podobnej charakterystyce. Obiekt = (identyfikakacja) - nazwa + stan (pola) + zachowanie (metody)

    59. 59 z 137 Obiekt - klasyfikacja Obiekty interfejsu uzytkownika Uzytkownik programu kontaktuje sie bezposrednio z nimi Nazywane sa czasami widgets (window gadgets) Przyklady: przyciski, listy wyboru, listy przewijane Obiekty srodowiska operacyjnego Sa kontrolowane przez system operacyjny Udostepniaja uslugi innym obiektom Obiekty zadaniowe Dokumenty Multimedia Obiekty dziedziny przedmiotowej np.: faktura, konto, pracownik

    60. 60 z 137 Obiekt deklaracja, inicjalizacja, definicja Deklaracja TypObiektu NazwaObiektu; Przyklad: Nauczyciel nauczyciel1; Inicjalizacja NazwaObiektu = new NazwaObiektu(ParametryKonstruktora); Przyklad: nauczyciel1 = new Nauczyciel( Jan, Adamski, 29); Definicja TypObiektu NazwaObiektu = new NazwaObiektu(ParametryKonstruktora); Przyklad Student student1 = new Student(tym.imie, tym.nazwisko, tym.wiek, tym.nrIndeksu, tym.srednia);

    61. 61 z 137 Obiekt odwolanie do pl i metod Odwolywanie do pl i metod obiekty nastepuje za pomoca operatora . Przyklady: imie = parImie; this.imie = noweDane.imie; tym.czyPracuje.equals(""); UzupelnijAtrybuty(); System.out.println(wyswietlanyTekst); tym.wiek = Integer.parseInt(dane); OperacjePlikowe.wczytajDaneNauczycieli(nauczyciele); nauczyciele.add(dodawany.dodaj()); daneNauczycieli.add(new Nauczyciel(tym.imie, tym.nazwisko, tym.wiek, tym.pracuje, tym.pensja));

    62. 62 z 137 Zwiazki pomiedzy obiektami i klasami Bardzo rzadkie sa przypadki, aby obiekty funkcjonowaly zupelnie niezaleznie od siebie Mozna wyrznic 2 rodzaje zwiazkw pomiedzy nimi. Asocjacja Zwiazek o charakterze strukturalnym Wskazuje, ktre obiekty wzajemnie sie znaja

    63. 63 z 137 Zwiazki pomiedzy obiektami i klasami Kompozycja Zwiazek o charakterze calosc-czesc Ma mocniejszy charakter jeden z obiektw nie moze istniec bez drugiego Obiekty wzajemnie wiedza o swoim istnieniu Mozna opisac ten zwiazek slowem ma

    64. 64 z 137 Obiekty i klasy - polimorfizm Polimorfizm to mozliwosc nadawania tej samej nazwy rznym atrybutom i operacjom oraz wykonywania rznych procedur i akcji przez operacje o tych samych nazwach; pozwala na redukcje liczby nazw atrybutw i operacji. Polimorfizm umozliwia rozrznianie operacji dla poszczeglnych obiektw klas bedacych specyfikacjami nadklasy, gdy sa wykonywane jako obiekt nadklasy. Polimorfizm umozliwia podstawianie pod obiekt nadklasy obiektw podklas.

    65. 65 z 137 Obiekty i klasy polimorfizm - przyklad public abstract class FiguraPlaska { protected String atrNazwa; FiguraPlaska() { this.atrNazwa = "Nieznana"; } public double obwd() { return 0.0; } }

    66. 66 z 137 Obiekty i klasy polimorfizm przyklad c.d public class Wyswietl { public static void wyswietlInf(FiguraPlaska parFigura) { System.out.println(parFigura.atrNazwa); System.out.println(parFigura.obwd()); } }

    67. 67 z 137 Obiekt - usuwanie Java nie wymaga definiowania destruktorw. Jest tak dlatego, ze istnieje mechanizm automatycznego zarzadzania pamiecia (ang. garbage collection). Obiekt istnieje w pamieci tak dlugo, jak dlugo istnieje do niego jakakolwiek referencja w programie, w tym sensie, ze gdy referencja do obiektu nie jest juz przechowywana przez zadna zmienna obiekt jest automatycznie usuwany a zajmowana przez niego pamiec zwalniana. W Javie zautomatyzowane istnieje mozliwosc deklaracji specjalnej metody finalize, ktra bedzie wykonywana przed usunieciem obiektu z pamieci. Deklaracja takiej metody ma zastosowanie, gdy nasz obiekt np.: ma referencje do urzadzen wejscia-wyjscia.

    68. 68 z 137 Obiekt usuwanie - przyklad protected void finalize () throws Throwable { if (m_plik != null) { m_plik.close(); m_plik = null; } }

    69. 69 z 137 Obiekty rzutowanie definicja i skladnia Rzutowanie (ang. casting) polega na skonwertowaniu zmiennej do pozadanego typu. Mozliwe jest jedynie rzutowanie okreslonych typw na inne np.: double na int i odwrotnie. W przypadku tworzonych obiektw mozliwe jest jedynie rzutowanie nadklasy na podklase (najczestszy przypadek) i na odwrt. W drugim przypadku nastepuje utrata pl i metod niezdefiniowanych w nadklasie.

    70. 70 z 137 Obiekty rzutowanie przyklad public class Kolo extends FiguraPlaska { // wczesniejsze instrukcje double pole() { return 34.1; } } public class Wyswietl { public static void wyswietlInf(FiguraPlaska parFigura) { Kolo kolo = new Kolo(); //wczesniejsze instrukcje kolo = (Kolo)parFigura; System.out.println(kolo.pole()); } }

    71. 71 z 137 Obiekty podstawowe typy

    72. 72 z 137 Obiekty podstawowe typy String - metody

    73. 73 z 137 Obiekty podstawowe typy String - przyklad public class StringTest { public static void main(String[] args){ String dane = " Arkadiusz Radomski "; System.out.println("Dane: " + dane); System.out.println("Dane z malej litery: " + dane.toLowerCase()); System.out.println("Nazwisko na pozycji:" + dane.indexOf("Radomski")); System.out.println("Znaki od 5 do 12:" + dane.substring(5,12)); System.out.println("Dlugosc napisu" + dane.length()); System.out.println("Napis bez poczatkowych i koncowych spacji: " + dane.trim() + "****"); } }

    74. 74 z 137 Obiekty podstawowe typy Date - metody

    75. 75 z 137 Obiekty podstawowe typy Date - format Za format daty jest odpowiedzialna klasa DateFormat. Podstawowe style w zaleznosci od dlugosci prezentacji daty: SHORT - np. 12.13.52 or 3:30pm MEDIUM - np. Jan 12, 1952 LONG np. January 12, 1952 or 3:30:32pm FULL np. Tuesday, April 12, 1952 AD or 3:30:42pm PST. Metoda getInstance() umozliwia pobranie lokalnego profilu wyswietlania daty. Metoda format(Date date) umozliwia przeformatowanie daty zgodnie z przyjetym profilem.

    76. 76 z 137 Obiekty podstawowe typy Date - przyklad import java.util.*; import java.text.DateFormat; public class TestData { static Date data = new Date(1997,12,05,14,45,32); public static void main(String args[]) { System.out.println("Wprowadzona data: " + data.toString()); System.out.println("Rok: " + data.getYear()); System.out.println("Czas: " + data.getTime()); data.setYear(27); System.out.println("Nowa data: " + data.toString() ); DateFormat formatDaty = DateFormat.getInstance(); System.out.println("Data pokazana zgodnie z profilem lokalnym:\n" + formatDaty.format(data)) ; formatDaty = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL); System.out.println("Data pokazana zgodnie z profilem \"najdluzszym\":\n" + formatDaty.format(data)); } }

    77. 77 z 137 Pakiet java.util zawiera dwie klasy zwiazane z data i czasem systemowym: Calendar GregorianCalendar Obiekt reprezentujacy kalendarz z aktualna data i czasem mozna wiec utworzyc na dwa sposoby: Calendar calendar = Calendar.getInstance(); GregorianCalendar calendar = new GregorianCalendar (); Pobranie daty i czasu umozliwia metoda get(): int dzien = calendar.get(Calendar.DAY_OF_MONTH); int miesiac = calendar.get(Calendar.MONTH)+1; int rok = calendar.get(Calendar.YEAR); int godz = calendar.get(Calendar.HOUR_OF_DAY); int min = calendar.get(Calendar.MINUTE); int sek = calendar.get(Calendar.SECOND); Obiekty podstawowe typy Date - pozostale klasy

    78. 78 z 137 Interfejsy - definicja Interfejsy sa szablonami klas wyrazajacymi jedynie, ze klasa ktra je implementuje musi zaimplementowac wszystkie metody wyrazone w interfejsie. Dzieki temu wymuszaja ich okreslona skladnie - zawieranie okreslonych procedur i funkcji przez klase. Kazdy interfejs i klasa moze implementowac dowolna ilosc interfejsw. Interfejsy definiuje sie podobnie do klas.

    79. 79 z 137 Interfejsy definiowanie i wykorzystanie Deklaracja: [modyfikatory] interface NazwaInterfejsu { //deklaracje metod } Przyklad: public interface Uruchamianie { int przykladowaMetoda(int y); } Wykorzystanie: Deklaracja_klasy implements nazwa interfejsu Przyklad: class Animacja extends Applet implements Uruchamianie { }

    80. Programowanie obiektowe Kolekcje

    81. 81 z 137 Kolekcje - definicja Kolekcje umozliwiaja przechowywanie i zarzadzanie w pamieci obiektami dowolnego typu. Sa one kontenerami elementami umozliwiajacymi przechowywanie wielu obiektw. Kolekcje sa elementem zblizonym funkcjonalnie do tablic z dwoma zasadniczymi rznicami: Moga przechowywac obiekty rznego typu Automatycznie zarzadzaja wielkoscia kolekcji Celem kolekcji jest umozliwienie dynamicznego dodawania i usuwania obiektw bez koniecznosci zarzadzania pamiecia im przydzielana sa automatycznie dopasowujaca sie do zawartosci tablica.

    82. 82 z 137 Kolekcje struktura - interfejsy

    83. 83 z 137 Kolekcje przykladowe implementacje

    84. 84 z 137 Kolekcje przykladowe implementacje c.d

    85. 85 z 137 Kolekcje zdefiniowanie Aby mc zdefiniowac zmienna typu kolekcji nalezy najpierw zaimportowac odpowiednie klasy: wszystkie - import java.util.*; konkretna - import java.util.Vector; Deklaracja: TypKolekcji [<TypWartosci>] NazwaKolekcji = new TypKolekcji [<TypWartosci>](); Przyklady: ArrayList nauczyciele = new ArrayList(); Vector<String>names = new Vector<String>(); Map<String, Integer> m = new HashMap<String, Integer>();

    86. 86 z 137 Kolekcje podstawowe metody

    87. 87 z 137 Kolekcje podstawowe metody c. d.

    88. 88 z 137 Kolekcje przyklady wykorzystania metod s1.containsAll(s2) ; names.add(firstname); nauczyciele.add(dodawany.dodaj()); nauczyciele.clear(); studenci.next(); parOsoba.remove(parPozycjeWyszukane[i] - wielkoscZmniejszenia); Object listaStudentow[] = parStudenci.toArray(); parOsoba.get(parPozycjeWyszukane[numerOsoby - 1]); a.set(i, a.get(j));

    89. 89 z 137 Kolekcje - przechodzenie Przy wykorzystaniu petli for-each mozliwe jest przejscie przez wszystkie elementy kolekcji oraz tablicy. Skladnia: for (TypWartosci zmienna : nazwaKolekcji) { //instrukcje } Przyklad: for (Object o : collection) System.out.println(o);

    90. 90 z 137 Kolekcje przyklady - Vector import java.util.Vector; public class PrzykladVector{ public static void main(String[]args){ Vector<String> imiona = new Vector<String>(); String[] imionaL = {Adam", Jan", Gosia", Patryk" }; for(String imie : imionaL){ imiona.add(imie); } for(String imie : imiona){ System.out.println(imie); } } }

    91. 91 z 137 Kolekcje przyklady - ArrayList public void wyswietlListaNauczycieli(ArrayList parNauczyciele) { Object listaNauczycieli[] = parNauczyciele.toArray(); int licznikNauczyciele; System.out.println("\nL i s t a n a u c z y c i e l i :\n"); for (licznikNauczyciele = 0; licznikNauczyciele < listaNauczycieli.length; licznikNauczyciele++) { String wyswietlanyTekst, parPracuje; Nauczyciel nauczyciel = (Nauczyciel) listaNauczycieli[licznikNauczyciele]; wyswietlanyTekst = licznikNauczyciele + 1 + "."; System.out.println(wyswietlanyTekst); nauczyciel.wyswietlInformacje(); } }

    92. 92 z 137 Kolekcje przyklady - Map import java.util.*; public class Freq { public static void main(String args[]) { Map<String, Integer> m = new HashMap<String, Integer>(); for (String a : args) { Integer freq = m.get(a); m.put(a, (freq == null ? 1 : freq + 1)); } System.out.println(m.size() + " rznych slw:"); System.out.println(m); } }

    93. Programowanie obiektowe Wyjatki

    94. 94 z 137 Definicja i koncepcja Wyjatki (ang. exceptions) sa sytuacja niestandardowa (specjalna) zwiazana z dzialaniem programu, powodujaca zawieszenie sie lub niepoprawne wykonanie programu. Java posiada mechanizm obslugi wyjatkw umozliwiajacy odpowiednie zareagowanie w takiej sytuacji i unikniecie zawieszenia lub niepoprawnego wykonania programu. Przechwycenie wyjatku umozliwia przerwanie normalnego wykonywania programu i wykonanie instrukcji zwiazanych z jego obsluga.

    95. 95 z 137 Przyklady sytuacji krytycznych Istnieje szereg sytuacji krytycznych glwnie zwiazanych z: Operacjami na plikach: Prba otwarcia pliku ktry nie istnieje, Prba zapisania danych do pliku, do ktrego nie mamy uprawnien. Niekompatybilne konwersje typw (np. ClassCastException, NumberFormatException ) Prba dostepu do elementu tablicy dalszym niz ostatni indeks (ArrayOutOfBoundsException) Brak obiektu odwolania (NullPointerException)

    96. 96 z 137 Struktura klas

    97. 97 z 137 Generowanie sytuacji wyjatkowych Generowanie (zgloszenie) wyjatku dokonujemy poprzez thrownew Exception("..."), jako utworzenie obiektu typu Exception i przerywanie wykonania biezacej metody. Aby wskazac i poinformowac JVM, ze metoda moze generowac wyjatek typu Exception nalezy na jej koncu dodac slowa kluczowe throws Exception. Uzycie tej frazy jest obowiazkowe, jesli nasza metoda moze generowac wyjatek, np. dla metod posiadajacych instrukcje zwiazane z I/O.

    98. 98 z 137 Generowanie sytuacji wyjatkowych - przyklad

    99. 99 z 137 Obsluga wyjatkw - skladnia try { //blok instrukcji gdzie moze wystapic wyjatek } catch (ObiektImplementujacyInterfejsThrowable nazwaZmiennej) { //blok instrukcji obslugujacych wystapienia sytuacji wyjatkowej jest wykonywany tylko, gdy wystapi wyjatek typu takiego jak typ zmiennej bedacej parametrem bloku catch } finally //opcjonalnie { // ten blok instrukcji jest wykonywany przed opuszczeniem sterowania, //nawet jesli blok try zawiera instrukcje return lub spowodowal //wystapienie wyjatku }

    100. 100 z 137 Obsluga wyjatkw - przyklad public class WywolajWyjatek { static public void main(String args[]) throws Exception { Liczba liczba = new Liczba(); try { liczba.dziel(1); } catch (Exception e) { e.printStackTrace(); } System.out.println("obsluga wyjatkw dziala"); } }

    101. 101 z 137 Obsluga wyjatkw - przyklad public static void zapiszDaneNauczycieli(ArrayList daneNauczycieli) throws IOException { FileWriter plikNauczyciele = new FileWriter("nauczyciele.txt"); Object zapiszDane[] = daneNauczycieli.toArray(); String dane; for (int i = 0; i < zapiszDane.length; i++) { Nauczyciel nauczyciel = (Nauczyciel) zapiszDane[i]; dane = nauczyciel.przygotujInformacje(); plikNauczyciele.write(dane); } plikNauczyciele.close(); }

    102. 102 z 137 Obsluga wyjatkw - przyklad import java.io.*; class WyjatekZapisz { public static void zapisz(String sciezka) throws IOException { FileWriter plik = new FileWriter(sciezka); String dane = "Przykladowe Dane"; plik.write(dane); plik.close(); } }

    103. 103 z 137 Obsluga wyjatkw przyklad c. d. public class Test { public static void main(String args[]) throws IOException { try{ WyjatekZapisz wyjatek = new WyjatekZapisz(); wyjatek.zapisz("c:\\aaa1\\dane.txt");} catch (IOException ioe){ System.out.println(ioe.toString()); } System.out.println("Program jest wykonywany dalej"); } }

    104. 104 z 137 Obsluga wyjatkw - przyklad import java.io.*; public class WyjatekWczytaj { static File plik = new File("nieistniejacy.txt"); public static void main(String args[]) throws IOException { try { FileInputStream wczytanie = new FileInputStream(plik); int dane; dane = wczytanie.read(); wczytanie.close(); } catch (IOException ioe){ ioe.printStackTrace(); System.out.println("Blad przy otwarciu pliku " + plik.getName());} } }

    105. 105 z 137 Obsluga wyjatkw wazne metody

    106. 106 z 137 Definiowanie wlasnych klas wyjatkw - koncepcja W Javie mozliwe jest definiowanie wlasnych klas wyjatkw dla obslugi sytuacji, uznawanych przez programiste za wyjatkowe. Klasa, ktra ma byc odpowiedzialna za obsluge wyjatkw w swojej definicji musi byc podklasa (dziedziczyc) z klasy Exception. Aby wyjatki dla danej metody byly obslugiwane przez nasza klase wyjatkw nalezy na koncu jej deklaracji dodac slowo kluczow throws oraz nazwe klasy obslugujacej wyjatki throws NazwaKlasyWyjatku.

    107. 107 z 137 Definiowanie wlasnych klas wyjatkw - skladnia class NazwaKlasyWyjatku extends Exception { NazwaKlasyWyjatku() { } NazwaKlasyWyjatku(String s) { super("\Tekst wyswietlany przez wyjatek: " + s); } }

    108. 108 z 137 Definiowanie wlasnych klas wyjatkw - przyklad class WyjatekSrednia extends Exception { WyjatekSrednia() { } WyjatekSrednia(String s) { super(s); } }

    109. 109 z 137 Definiowanie wlasnych klas wyjatkw przyklad c. d. class Student{ double sumaOcen = 0; int iloscOcen = 0; double srednia = 0; void operacjeSrednia() throws WyjatekSrednia { try { srednia = sumaOcen / iloscOcen; if (srednia < 2) throw new WyjatekSrednia("Srednia nie moze byc nizsza niz 2"); if (srednia > 5) throw new WyjatekSrednia("Srednia nie moze byc wyzsza niz 5"); System.out.println("Srednia ocen wynosi:" + this.srednia);} catch(Exception e) { System.out.println("Wyjatek: " + e.getClass() + " z nastepujacym komentarzem - " + e.getMessage());} } }

    110. 110 z 137 Definiowanie wlasnych klas wyjatkw przyklad c. d. public class TestWyjatki { public static void main(String[] args) throws Exception { Student student = new Student(); student.sumaOcen = Double.parseDouble(args[0]); student.iloscOcen = Integer.parseInt(args[1]); student.operacjeSrednia(); } }

    111. 111 z 137 Obsluga wielu wyjatkw - koncepcja Istnieje mozliwosc obslugi wielu wyjatkw odnosnie jednego fragmentu kodu try w podzieleniu na konkretne ich typy np. zarwno bledu braku pliku (obiekt typu IOException) do otwarcia oraz jego konca podczas wczytywania (obiekt typu EOFException). W celu obslugi wielu wyjatkw nalezy dla bloku try zdefiniowac odpowiednie bloki catch z paramerami jako obiekty odpowiadajace klasom wyjatkw.

    112. 112 z 137 Obsluga wielu wyjatkw - skladnia try { //blok instrukcji gdzie moze wystapic wyjatek } catch (ObiektImplementujacyInterfejsThrowable nazwaZmiennej) { //blok instrukcji obslugujacych wystapienia sytuacji wyjatkowej } catch (ObiektImplementujacyInterfejsThrowable nazwaZmiennej) { //blok instrukcji obslugujacych wystapienia sytuacji wyjatkowej }

    113. 113 z 137 Obsluga wielu wyjatkw - przyklad class NieprawidlowosciSrednia extends WyjatekSrednia { NieprawidlowosciSrednia() { } NieprawidlowosciSrednia(int iloscOcen, double srednia) { super(\nNieprawidlowosci sredniej\n" + "Srednia wynosi zaledwie:" + srednia + "\n przy ilosci zaliczonych przedmiotw ponizej minimum rwnemu:" + iloscOcen); } }

    114. 114 z 137 Obsluga wielu wyjatkw przyklad c. d. class Student{ void operacjeSrednia() throws Exception { try { if ((iloscOcen < 8) && (srednia < 3.5)) throw new NieprawidlowosciSrednia(iloscOcen, srednia); System.out.println("Srednia ocen wynosi:" + this.srednia);

    115. 115 z 137 Obsluga wielu wyjatkw inna wersja public class TestWyjatki { public static void main(String[] args) throws Exception { Student student = new Student(); student.sumaOcen = Double.parseDouble(args[0]); student.iloscOcen = Integer.parseInt(args[1]); try{ student.operacjeSrednia(); } catch(NieprawidlowosciSrednia ns) { ns.printStackTrace(); } catch(WyjatekSrednia ws) { ws.printStackTrace(); } } }

    116. Programowanie obiektowe Operacje wejscia - wyjscia

    117. 117 z 137 Koncepcja Operacje wejscia wyjscia (ang. Input/Output, I/O) w Javie zrealizowane sa za pomoca klas zawartych w pakiecie java.io. Programy Javy uzywaja strumieni (ang. streams) do wykonywania operacji wejscia /wyjscia, z tym, ze zarwno zrdlem wejsciowym (ang. input source) jak i zrdlem wyjsciowym (ang. output source) moze byc wszystko, co zawiera dane: pliki, lancuchy znakowe rwniez pobierane z klawiatury, pamiec.

    118. 118 z 137 Koncepcja Poczawszy od wersji Javy 1.1 zdefiniowano nowe, przeznaczone do poprawnego czytania strumienie znakw w standardzie Unicode. Klasy obslugujace operacje I/O w Javie maja model warstwowy, co oznacza, ze poszczeglne klasy posiadaja stosunkowo ograniczone mozliwosci, ale mozliwe jest uzyskanie ich odpowiednich wlasciwosci poprzez dodanie wyspecjalizowanych klas. Przykladowo, klasa wejsciowa InputStream nie jest buforowana (co oznacza, ze jednoczesnie moze byc pobierany wylacznie jeden znak), ale dzieki klasie BufferedInputStream mozliwe jest dodanie buforowania do klasy InputStream.

    119. 119 z 137 Przeglad klas strumieni - InputStream Jest abstrakcyjna nadklasa dla szeregu klas (np.: FileInputStream, SequenceInputStream) dostarczajaca podstawowy interfejs programistyczny wraz z czesciowa implementacja strumieni wejsciowych. Klasa InputStream definiuje metody przeznaczone do: czytania bajtw lub tablic bajtw zaznaczenia pozycji w strumieniu opuszczenia czesci bajtw z wejscia znajdowania liczby dostepnych bajtw do czytania i resetowania biezacej pozycji w strumieniu

    120. 120 z 137 Przeglad klas strumieni - InputStream c.d. Podczas tworzenia nowego strumienia wejsciowego, nastepuje jego automatyczne otworzenie. Strumien wejsciowy zostaje zamkniety: poprzez uzycie metody close gdy doobiektu InputSteam nie ma juz zadnych referencji i jest usuwany z pamieci

    121. 121 z 137 Przeglad klas strumieni - OutputStream Klasa OutputStream podobnie jak klasa InputStream jest abstrakcyjna nadklasa dla wielu klas (np.: FileOutputStream, PrintStream). Dostarcza ona minimalny interfejs programistyczny wraz z czesciowa implementacja strumieni wyjsciowych. Klasa ta definiuje metody zapisywania bajtw lub tablic bajtw. Strumien wyjsciowy jest automatycznie otwierany, gdy jest tworzony. Jego zamkniecie nastepuje: poprzez uzycie metody close, gdy do obiektu OutputStream nie ma juz zadnych referencji i jest usuwany z pamieci (ang. garbage collected).

    122. 122 z 137 Przeglad klas strumieni strumienie znakowe W wersji Java 1.1 do pakietu java.io dodano nowe klasy do czytania strumieni zawierajacych znaki (ang. character streams). Klasy te dzialaja podobnie, jednak zamiast czytac i zapisywac bajty czytaja i zapisuja 2-bajtowe znaki Unicode. Ulatwia to pisanie programw niezaleznych od standardu kodowania znakw. Strumienie znakowe nie sa uzyteczne tam gdzie dane sa zapisywane binarnie, np.: odczytywanie plikw dzwiekowych czy implementacja protokolw sieciowych.

    123. 123 z 137 Przeglad klas strumieni strumienie znakowe Klasy: Do odczytu Reader, np.: BufferedReader FileReader Do zapisu Writer, np.: BufferedWritter FileWritter

    124. 124 z 137 Strumienie wejsciowe klawiatura InputStreamReader umozliwia odczytanie pojedynczych znakw. Deklaracja: InputStreamReader nazwaStrumienia = new InputStreamReader(InputStream in); Przyklad: InputStreamReader is = InputStreamReader(System.in); Metody: close() zamyka strumien getEncoding() zwraca nazwe systemu kodowania read() umozliwia wczytanie pojedynczego znaku

    125. 125 z 137 Strumienie wejsciowe klawiatura BufferedReader umozliwia odczytanie znakw, ktre sa buforowane co daje mozliwosc odczytywania rwniez tablic i calych linii. Deklaracja: BufferedReader nazwaStrumienia = new BufferedReader(Reader in); Przyklad: BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Metody: close() zamyka strumien getEncoding() zwraca nazwe systemu kodowania read() / readLine() umozliwia wczytanie pojedynczego znaku / calej linii

    126. 126 z 137 Strumienie wejsciowe klawiatura - przyklad BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public void dodajOsoba () throws IOException { System.out.println(""); System.out.print("Podaj imie "); imie = br.readLine(); System.out.print("Podaj nazwisko "); nazwisko = br.readLine(); System.out.print("Podaj wiek "); wiek = Integer.parseInt(br.readLine()); }

    127. 127 z 137 Strumienie wyjsciowe ekran System.out.print() / System.out.println() / umozliwiaja wypisanie na ekranie znakw. Ponadto instrukcja println powoduje przejscie do nowego wiersza. Przyklad: System.out.println("Jaka operacje chcesz wykonac (wpisz numer):");

    128. 128 z 137 Strumienie wyjsciowe ekran PrintWriter klasa umozliwiajaca wypisanie na ekranie znakw. Zastepuje metody klasy System.out. Deklaracja: PrintWriter nazwaStrumienia = new PrintWriter(OutputStream out, boolean autoFlush) ; Przyklad: PrintWriter pw = PrintWriter(System.out, true) ; Metody: close() getEncoding() print() / println()

    129. 129 z 137 Strumienie wyjsciowe ekran - przyklad import java.io.*; public class WypisanieDanych { public static void main(String args[]) { char[] wybr = {'1','2','3','4'}; PrintWriter pw = new PrintWriter(System.out, true); pw.print("Jaka operacje chcesz wykonac (wpisz numer):"); pw.println(wybr); } }

    130. 130 z 137 Strumienie wejsciowe plik FileReader umozliwia odczytanie pojedynczych znakw z pliku. Deklaracja: FileReader nazwaStrumienia = new FileReader(String fileName); Przyklad: FileReader fr = new FileReader(c:\studenci.txt); Metody: close() zamyka plik getEncoding() zwraca nazwe systemu kodowania pliku read() umozliwia wczytanie pojedynczego znaku

    131. 131 z 137 Strumienie wejsciowe plik - przyklad public static void wczytajDaneStudentow(ArrayList daneStudentow) throws IOException { Object zapiszDane[] = daneStudentow.toArray(); BufferedReader wczytanie = new BufferedReader(new FileReader("studenci.txt")); PobieranieDanych tym = new PobieranieDanych(); String dane = new String(); try { while (true) { dane = wczytanie.readLine(); if (dane == null) break; tym.imie = dane;

    132. 132 z 137 Strumienie wejsciowe plik przyklad c. d. dane = wczytanie.readLine(); tym.nazwisko = dane; dane = wczytanie.readLine(); tym.wiek = Integer.parseInt(dane); dane = wczytanie.readLine(); tym.nrIndeksu = Integer.parseInt(dane); dane = wczytanie.readLine(); tym.srednia = Double.parseDouble(dane); daneStudentow.add(new Student(tym.imie, tym.nazwisko, tym.wiek, tym.nrIndeksu, tym.srednia)); } wczytanie.close(); } catch(EOFException e) { wczytanie.close(); } }

    133. 133 z 137 Strumienie wyjsciowe plik FileWriter umozliwia zapisywanie danych do pliku. Deklaracja: FileWriter nazwaStrumienia = new FileWriter(String fileName, boolean append); Przyklad: FileWriter plikNauczyciele = new FileWriter("nauczyciele.txt"); Metody: close() zamyka plik getEncoding() zwraca nazwe systemu kodowania pliku write() zapisuje dane do pliku

    134. 134 z 137 Strumienie wyjsciowe plik przyklad public static void zapiszDaneNauczycieli(ArrayList daneNauczycieli) throws IOException { FileWriter plikNauczyciele = new FileWriter("nauczyciele.txt"); Object zapiszDane[] = daneNauczycieli.toArray(); String dane; for (int i = 0; i < zapiszDane.length; i++) { Nauczyciel nauczyciel = (Nauczyciel) zapiszDane[i]; dane = nauczyciel.przygotujInformacje(); plikNauczyciele.write(dane); } plikNauczyciele.close(); }

    135. 135 z 137 Strumienie wejsciowe/wyjsciowe plik RandomAccessFile jest klasa umozliwiajaca odczyt/zapis danych do pliku, poczawszy od dowolnego miejsca. Miejsce dostepu okresla kursor o nazwie file pointer, od ktrego mozliwy jest odczyt/zapis danych. Sluza do tego dwie metody: getFilePointer zwraca aktualna pozycje kursora seek(long pos) umozliwia ustawienie pozycji kursora Tryby dostepu: r dostep w trybie odczytu rw dostep w trybie zapisu rws dostep w trybie zapisu i odczytu z wymaganiem synchronicznego zapisu danych i metadanych pliku rwd - dostep w trybie zapisu i odczytu z wymaganiem synchronicznego zapisu danych

    136. 136 z 137 Strumienie wejsciowe/wyjsciowe plik c. d. Deklaracja: RandomAccessFile nazwaStrumienia = new RandomAccessFile(String name, String mode); Przyklad: RandomAccessFile raf = new RandomAccessFile ("nauczyciele.txt,rw); Metody: close() zamyka plik read() / readLine() wczytuja dane z pliku write(typ) / writeChars(String s) zapisuja dane do pliku

More Related