1 / 35

Podstawowe aspekty programowania w Javie

emiko
Download Presentation

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 elementów 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 obiektów, ulozonych w hierarchiczne struktury i potrafiacych komunikowac sie ze soba poprzez przesylanie wiadomosci, dla realizowania celów systemu. Programowanie obiektowe czerpie swoja koncepcje z rzeczywistego swiata otaczajacego nas skladajacego sie z olbrzymiej ilosci obiektów, 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: rozróznianie poszczególnych obiektów tworzenie pojec - laczenie obiektów 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 obiektów z jednolitym zbiorem atrybutów i uslug, zawierajacy opis tworzenia nowych obiektów w klasie. Klasa = wspólne wlasnosci + wspólne zachowania Klasy dla umozliwienia pisania programów 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 NazwyInterfejsów] { //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 której dziedziczy nazwe nadklasy (ang. superclass). Podklasa jest uszczególowieniem nadklasy. Dziedziczenie polega na „przejeciu” pól 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 której 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 wspólna tematyke i ulozonych hierarchicznie. Organizacja klas w ten sposób 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 pakietów jak i dodawanie definiowanych klas do juz istniejacych. Umieszczenie klas w pakiecie jest analogiczne do umieszczenia klas w strukturze katalogów.

    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 róznica, 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 rozróznienia nazw pól od pozostalych zmiennych nalezy stosowac podczas deklaracji nazwy zgodnie z przyjeta konwencja. Najczesciej uzywa sie przedrosków, 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, rozróznianych na podstawie ilosci lub typów parametrów. Umozliwia to wywolanie odpowiedniej metody w zaleznosci od parametrów wywolania. Nie mozliwe jest rozróznianie metod na podstawie zwracanych przez nie typów wartosci. Przeciazanie umozliwia posiadanie definicji szeregu metod wykonujacych rózne 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 glównie inicjalizacji wartosci pól 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 glównie inicjalizacji wartosci pól 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 obiektów 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 pól i metod Odwolywanie do pól 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 wyróznic 2 rodzaje zwiazków pomiedzy nimi. Asocjacja Zwiazek o charakterze strukturalnym Wskazuje, które obiekty wzajemnie sie „znaja”

    63. 63 z 137 Zwiazki pomiedzy obiektami i klasami Kompozycja Zwiazek o charakterze calosc-czesc Ma mocniejszy charakter – jeden z obiektów 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 róznym atrybutom i operacjom oraz wykonywania róznych procedur i akcji przez operacje o tych samych nazwach; pozwala na redukcje liczby nazw atrybutów i operacji. Polimorfizm umozliwia rozróznianie operacji dla poszczególnych obiektów klas bedacych specyfikacjami nadklasy, gdy sa wykonywane jako obiekt nadklasy. Polimorfizm umozliwia podstawianie pod obiekt nadklasy obiektów podklas.

    65. 65 z 137 Obiekty i klasy – polimorfizm - przyklad public abstract class FiguraPlaska { protected String atrNazwa; FiguraPlaska() { this.atrNazwa = "Nieznana"; } public double obwód() { 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.obwód()); } }

    67. 67 z 137 Obiekt - usuwanie Java nie wymaga definiowania destruktorów. 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, która 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 typów na inne np.: double na int i odwrotnie. W przypadku tworzonych obiektów mozliwe jest jedynie rzutowanie nadklasy na podklase (najczestszy przypadek) i na odwrót. W drugim przypadku nastepuje utrata pól 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 która 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 interfejsów. 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 obiektów. Kolekcje sa elementem zblizonym funkcjonalnie do tablic z dwoma zasadniczymi róznicami: Moga przechowywac obiekty róznego typu Automatycznie zarzadzaja wielkoscia kolekcji Celem kolekcji jest umozliwienie dynamicznego dodawania i usuwania obiektów 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 móc 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() + " róznych slów:"); 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 wyjatków 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 glównie zwiazanych z: Operacjami na plikach: Próba otwarcia pliku który nie istnieje, Próba zapisania danych do pliku, do którego nie mamy uprawnien. Niekompatybilne konwersje typów (np. ClassCastException, NumberFormatException ) Próba 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 throw new 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 wyjatków - 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 wyjatków - 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 wyjatków dziala"); } }

    101. 101 z 137 Obsluga wyjatków - 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 wyjatków - 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 wyjatków – 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 wyjatków - 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 wyjatków – wazne metody

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

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

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

    109. 109 z 137 Definiowanie wlasnych klas wyjatków – 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 wyjatków – 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 wyjatków - koncepcja Istnieje mozliwosc obslugi wielu wyjatków odnosnie jednego fragmentu kodu try w podzieleniu na konkretne ich typy – np. zarówno bledu braku pliku (obiekt typu IOException) do otwarcia oraz jego konca podczas wczytywania (obiekt typu EOFException). W celu obslugi wielu wyjatków nalezy dla bloku try zdefiniowac odpowiednie bloki catch z paramerami jako obiekty odpowiadajace klasom wyjatków.

    112. 112 z 137 Obsluga wielu wyjatków - 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 wyjatków - przyklad class NieprawidlowosciSrednia extends WyjatekSrednia { NieprawidlowosciSrednia() { } NieprawidlowosciSrednia(int iloscOcen, double srednia) { super(„\nNieprawidlowosci sredniej\n" + "Srednia wynosi zaledwie:" + srednia + "\n przy ilosci zaliczonych przedmiotów ponizej minimum równemu:" + iloscOcen); } }

    114. 114 z 137 Obsluga wielu wyjatków – 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 wyjatków – 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 zarówno zródlem wejsciowym (ang. input source) jak i zródlem wyjsciowym (ang. output source) moze byc wszystko, co zawiera dane: pliki, lancuchy znakowe – równiez pobierane z klawiatury, pamiec.

    118. 118 z 137 Koncepcja Poczawszy od wersji Javy 1.1 zdefiniowano nowe, przeznaczone do poprawnego czytania strumienie znaków w standardzie Unicode. Klasy obslugujace operacje I/O w Javie maja model warstwowy, co oznacza, ze poszczególne 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 bajtów lub tablic bajtów zaznaczenia pozycji w strumieniu opuszczenia czesci bajtów z wejscia znajdowania liczby dostepnych bajtów 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 do obiektu 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 bajtów lub tablic bajtów. 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 programów niezaleznych od standardu kodowania znaków. Strumienie znakowe nie sa uzyteczne tam gdzie dane sa zapisywane binarnie, np.: odczytywanie plików dzwiekowych czy implementacja protokolów 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 znaków. 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 znaków, które sa buforowane co daje mozliwosc odczytywania równiez 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 znaków. 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 znaków. 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[] wybór = {'1','2','3','4'}; PrintWriter pw = new PrintWriter(System.out, true); pw.print("Jaka operacje chcesz wykonac (wpisz numer):"); pw.println(wybór); } }

    130. 130 z 137 Strumienie wejsciowe – plik FileReader – umozliwia odczytanie pojedynczych znaków 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 którego 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