programowanie_obiekt..

Download Report

Transcript programowanie_obiekt..

Przemysław Pardel, Listopad 2007

            Historia i geneza programowania obiektowego, Programowanie obiektowe, Obiekty i typy podstawowe, Klasy, Metody, Pola i metody statyczne, Konstruktory, Pakiety, Polimorfizm, Metody i klasy abstrakcyjne, Interfejsy, Inne.

2

    

Simuli 67

– Ole-Johan Dahl i Kristen Nygaard z Norsk Regnesentral w Oslo pogrupowano typy statków w różne klasy obiektów, a każda z klas sama odpowiadała za określanie własnych danych i zachowań

Smalltalk

- stworzony w Simuli w Xerox PARC - w pełni dynamiczny system, w którym obiekty mogą być tworzone i modyfikowane "w locie„

C++

- połowa lat 80 - W tym okresie cechy obiektowe dodano do wielu języków programowania, w tym

Ady

,

BASIC

-a,

Lisp

-a,

Pascal

-a i innych,

Eiffel

- Bertrand Meyer - obecnie został on w zasadzie całkowicie zastąpiony przez

Javę

Obiektowość rozprzestrzeniła się dość znacznie, jednak zwykle w systemach hybrydowych, w połączeniu z programowaniem niskopoziomowym (

C++

), funkcyjnym (

Ocaml

, niektóre dialekty

Lisp

-a), sieciowym (

Java

), skryptowym (

Perl

,

Python

,

Ruby

) itd. Systemy czysto obiektowe typu

Smalltalk

-a nie znalazły zbyt szerokiego zastosowania.

4

    Zgodność podejścia z rzeczywistością – największy atut programowania, projektowania oraz analizy obiektowej.

Arystoteles – forma (odpowiednik platońskiej idei) i materia (Formie w programowaniu obiektowym odpowiada Klasa, materii - instancja - obiekt).

Podstawową cechą mózgu ludzkiego jest klasyfikacja łączenie występujących w rzeczywistości obiektów w grupy – klasy.

Podstawowy postulat:

Tym lepszy jest model, im bardziej jest zgodny z rzeczywistością.

5

 

Definicja:

Programowanie obiektowe - (ang. object-oriented programming) – metodyka tworzenia programów komputerowych, która definiuje programy za pomocą obiektów – elementów łączących stan (czyli dane) i zachowanie (czyli procedury, metody)

Obiektowy program komputerowy wyrażony jest jako zbiór obiektów komunikujących się pomiędzy sobą w celu wykonywania określonych zadań.

7

     Wszystko jest obiektem.

Program jest zbiorem obiektów, które wysyłają sobie komunikaty.

Każdy obiekt posiada pamięć, na którą składają się inne obiekty.

Każdy obiekt posiada swój typ.

Wszystkie obiekty tego samego typu mogą otrzymywać te same komunikaty.

8

 

Definicja:

Obiekt: Podstawowa jednostka abstrakcji modelu obiektowego

Główne cechy obiektu:  Stan – dane wewnętrzne,  zachowanie – zestaw metod do wykonania,  tożsamość – każdy obiekt można w sposób jednoznaczny odróżnić od innych obiektów.

10

  Metoda statyczna  Na stosie lub w obszarze statycznym: ▪ ▪ Metoda szybka, Programista musi sam zwolnić pamięć.

 Kompilator wyznacza czas trwania obiektu, i sam go niszczy.

Metody dynamiczna (Java)  Tworzenie dynamiczne obiektów na stercie: ▪ Ilość i czas życia obiektów nieznany do czasu wykonania.

 Java używa odśmiecacz pamięci (garbage collector), by wykrywać i usuwać obiekty nieużywane.

11

Definicja:

Implementacja to kod umożliwiający wykonanie żądań przez obiekt

np.

Utworzenie obiektu klasy:

Autobus aut = new Autobus();

Żądanie pod kierunkiem obiektu:

aut.Uruchom();

12

    Program dostarcza usługi, Program składa się ze zbioru obiektów, Realizuje usługi wykorzystując usługi wykonywane przez składowe obiekty, Usługowy model ułatwia projektowanie, analizę i ponowne użytkowanie obiektów.

13

Wszystko w Javie jest obiektem

JAVA: Deklaracja tworzy odwołanie do obiektu s typu/klasy String: String s Obiekt wskazywany przez s nie istnieje zatem: s.length() – ŹLE Deklaracja oraz inicjacja odwołania do obiektu s typu/klasy String: String s = new String(“abc”); Teraz s wskazuje na konkrety obiekt utworzony w pamięci, o wartości “abc” s.length() - DOBRZE 14

      Rejestry – szybka pamięć wewnątrz procesora, ograniczona liczba, niedostępne z programu, Stos - część RAM, szybki dostęp, rozmiar i czas życia danych znane w czasie kompilacji, odwołania do obiektów, Sterta – część RAM, rozmiar i czas życia danych nieznane w czasie kompilacji, składowanie obiektów, wolniejszy dostęp, Obszar statyczny – część RAM, dane dostępne w dowolnym momencie z programu, słowo kluczowe static, Obszar stałych – w kodzie programu, ewentualnie w pamięci ROM, Obszar spoza RAM – obiekty trwałe (zachowują stan między wywołaniami programu), zamiana obiektów w strumień bajtów (do przesłania/zapisu).

15

  Czasami tworzenie obiektów na stercie (przez operator new) nie jest efektywne:

Integer i = new Integer(1);

Typ podstawowy:

int i = 1;

Tworzy się zmienna która nie jest odwołaniem do obiektu, a wartością.

16

    boolean (Boolean), char (Character), byte (Byte), short (Short), int (Integer), long (Long), float (Float), double (Double), void (Void), Rozmiar każdego typu jest niezmienny – programy są przenośne, Wszystkie typy numeryczne są ze znakiem, Klasa opakowująca typ podstawowy pozwala umieszczać dane na stercie:

Integer i = new Integer(1);

17

} } {

{

 Zasięg przez położenie nawiasów:

int i = 1; // dostepny i { int j = 2; // dostepne i, j } i = j // dostepny i

Niedozwolone przesłanianie

int i = 1; { int i = 2; // niedozwolone, Komunikat błędu – zmienna już istnieje }

18

{

 Życie obiektów jest inne od życia zmiennych typów podstawowych.

String str = new String(“abc”); }

 Odwołanie

str

nie istnieje poza zasięgiem deklaracji, natomiast obiekt wskazany przez

str

będzie nadal istniał.

19

  Obiekty które są identyczne z wyjątkiem stanu są grupowane w klasy,

Klasa bytów (class) określa opis bytu (stałe, zmienne, pola) oraz jego zachowanie (metody) Klasa: interfejs i implementacja.

Obiekty klasy mają tą samą:  charakterystykę – elementy składowe   zachowanie – operacje na stanie Różnią się wartością stanu, i tożsamością.

21

   Każda klasa dziedziczy z klasy Object przynajmniej pośrednio.

Klasa zadeklarowana jako final nie może być już niczyją nadklasą.

Za inicjalizowanie obiektów danej klasy odpowiadają konstruktory (Java tworzy domyślny - bezargumentowy).

22

    Nowe typy obiektów zawarte są w klasach.

Deklaracja klasy:

class NazwaTypu { ... }

Utworzenie obiektów klasy:

NazwaTypu a = new NazwaTypu();

Klasa zawiera dwa rodzaje elementów:  pola – obiekty dowolnego typu lub zmienne typów podstawowych  metody – komunikaty które może otrzymać dany obiekt 23

 Każdy obiekt uzyskuje własny obszar pamięci dla swoich zmiennych:

class Dane { int i; float f; Double d; }

 Obiekty nie dzielą zmiennych między sobą.

24

  Utworzenie obiektu klasy:

Dane da = new Dane();

Odwołanie do pól obiektu

da

:

da.i = 47; da.f = 1.1f; da.d = new Double(1.0d);

25

   Gdy pole jest typu podstawowego, jeśli nie zainicjowane, to otrzyma wartość domyślną:  boolean false, char '\u0000‘, byte (byte)0, short (short)0, int 0, long 0L, float 0.0f

Inicjalizacja jest gwarantowana dla zmiennych:  typu podstawowego  deklarowanych jako składowe klas Inicjalizacja nie dotyczy zmiennych lokalnych, które nie są polami w klasie.

26

Położenie klasy ?

 W tym samy pliku źródłowym – po prostu  używamy Inne położenie np.  klasa ArrayList

import java.util.ArrayList;

 Wszystkie klasy w pakiecie java.util

import java.util.*;

27

Definicja:

Metoda - Nazwane zachowanie obiektu jakie jest on zobowiązany przejawić; określona funkcjonalność jaką przejawiają obiekty danej klasy

 W Javie rozróżniamy dwa rodzaje metod:  Metoda klasowa (static) istnieje jedna dla wszystkich obiektów danej klasy, nawet, gdy żaden z nich jeszcze nie został powołany do życia,  Metoda instancyjna - jest tyle kopii ile obiektów, czyli do każdego obiektu przypisana jest kopia metody instancyjnej.

29

}

obiekt:

typZwracany nazwaMetody(/*argumenty*/) { ciało metody

 Deklarowane tylko jako części składowe klas, i wywoływane    Metoda określa komunikat które może otrzymać dany na rzecz obiektu.

typZwracany

to typ wartości zwracanych przez metodę.

argumenty

to typy i nazwy; lista argumentów przekazywanych metodzie.

ciało metody

to definicja metody.

30

 Podanie nazwy obiektu, kropki, nazwy metody, i jej listy argumentów (wysyłanie komunikatu do obiektu):

nazwaObiektu.nazwaMetody(arg1,arg2) }

 Lista obiektów i ich klas, które mogą być przekazane metodzie:

int pamiec(String str) { return str.length();

 

str

jest referencją do obiektu.

length()

jest jedną z metod łańcucha

str

.

31

return pełni dwie funkcje:  określa opuszczenie metody

{

 określa wartość zwracaną (jeśli jest)  Typ void - metoda nie zwraca wartości:

void nic_return() return; } } { void nic2_bez_return()

32

   Klasa posiada dwie lub więcej metod o tej samej nazwie ale różnych deklaracjach parametrów.

Java używa liczby i typów argumentów by ustalić, którą wersję metody należy wywołać.

Przeciążanie metod plus dziedziczenie to sposób na implementację polimorfizmu .

33

} { class Metody void test() { System.out.println("Brak parametrow"); { } void test(int a) } { System.out.println("a: " + a); } void test(int a, int b) { System.out.println("a i b: " + a + " " + b); } double test(double a) System.out.println("double a: " + a); return a*a;

34

{

 Automatyczna kowersja typów gdy nie istnieje metoda o dokładnym typie wywołania:

void test() System.out.println("Brak parametrow”); { } void test(double a) System.out.println("double a: " + a); } int i = 88; test(); test(i);

 Następuje konwersja int na double 35

 Java umożliwia wystąpienie powiązanych metod pod jedną nazwą: jeden interfejs, wiele metod.

static int abs(int i) static long abs(long i) static float abs(float i)

36

} {

 Deklaracja pól statycznych:

class StaticTest static int i = 47;

   st1.i i st2.i są te same:

StaticTest st1 = new StaticTest(); StaticTest st2 = new StaticTest();

Odwołanie przez obiekty klasy:

st1.i++;

Odwołanie bez obiektu klasy:

StaticTest.i++;

38

} {

 Możliwość wywołania metody bez konieczności tworzenia obiektu (np. main):

class StaticFun } { static void incr() StaticTest.i++

 Przez obiekt:

StaticFunction sf = new StaticFunction(); sf.incr();

 Przez klasę:

StaticFunction.incr();

39

}

Program wyświetlający na ekranie słowo ‘’Hello World’’ i bieżącą datę:

//HelloWorld.java

- Komentarz import java.util.*;

//????

{ public class HelloWorld } { public static void main(String [] args) System.out.println(“’Hello World , “); System.out.println(new Date());

  Nazwy klas rozpoczynają się od dużej litery, każdy kolejny wyraz też z dużej litery.

Nazwy zmiennych/pól/metod podobnie, ale pierwsza litera jest mała.

40

    Konstruktor realizuje automatyczną inicjację obiektu zaraz po jego utworzeniu, Konstruktor posiada tą samą nazwę jak klasa, w której się znajduje, Konstruktor piszemy bez typu wyniku: domyślnym typem konstruktora klasy jest ta sama klasa, Gdy klasa nie posiada konstruktora, domyślny konstruktor automatycznie inicjuje pola zerami.

42

} { class Pudelko { double szerokosc, wysokosc, glebokosc; //konstruktor pudelka Pudelko() System.out.println(“Budujemy pudelko”); szerokosc = 10; wysokosc = 10; glebokosc = 10; } } { //oblicza objetosc pudelka double objetosc() return szerokosc * wysokosc * glebokosc;

43

{ class Pudelko double szerokosc, wysokosc, glebokosc; { //parametryzowany konstruktor pudelka Pudelko(double s, double w, double g) szerokosc = s; wysokosc = w; glebokosc = g; } } ...

44

 

} {

Odwołanie z metody do obiektu który ją wywołał, Przesłanianie Pól:  Nielegalne jest deklarowanie dwóch zmiennych o tej samej nazwie wewnątrz zawierających się bloków,  Legalne jest deklarowanie zmiennych lokalnych i parametrów o tej samej nazwie jak pola klasy,  Następuje przesłonięcie pól przez zmienne lokalne:

Pudelko(double szerokosc, double wysokosc, double glebokosc) this.szerokosc = szerokosc; this.wysokosc = wysokosc; this.glebokosc = glebokosc;

45

 Dodatkowe czynności do wykonania gdy obiekt jest usuwany z pamięci, np. zwolnienie dostępu do pliku wykonywane są przez metodę finalize():

protected void finalize() { } ...

 Metoda wywoływana jest przez odśmiecacz pamięci gdy ten usuwa niepotrzebny obiekt ze sterty.

46

   

Definicja:

Pakiety - Służą organizacji modelu przez łączenie elementów specyfikacji w grupy.

Pliki są grupowane w pakiety, które tworzą swoją integralną przestrzeń nazw, Klasy mogą mieć te same nazwy wewnątrz innych pakietów, a do pełnej identyfikacji używa się złożenia nazwy pakietu i nazwy własnej klasy Pakiet - zbiornik na klasy:  dzieli przestrzeń nazw na rozłączne zbiory  kontroluje widoczność klas i składowych klas 48

 Instrukcja pakietu umieszczona jako pierwsza komenda pliku źródłowego:

package MojPakiet;

   Wszystkie klasy w pliku należą do pakietu MojPakiet.

Inne pliki mogą posiadać tą samą instrukcję: pakiet rozkłada się na wiele plików.

Wszystkie pliki .class w pakiecie MojPakiet są zapisywane w katalogu MojPakiet.

 Pakiet wielo-poziomowy:

package pakiet1.pakiet11.pakiet111;

49

Dodatkowe klasy/pakiety, które będą potrzebne w kodzie programu importujemy słowem kluczowym

import

:

import java.util.*;

java.lang

- pakiet automatycznie włączany do każdego pliku Java  Pakiet java.lang zawiera klasę System  Klasa System zawiera pole: static PrintStream out;  Klasa PrintStream zawiera metodę: println(String x) void 50

 Jeśli klasa o tej samej nazwie występuje w dwóch różnych pakietach importowanych do programu:

import pakiet1.*; import pakiet2.*;

  kompilator wyświetli komunikat błędu gdy spróbujemy użyć jednej z klas.

Należy wówczas użyć pełnej nazwy:  pakiet1.Klasa

 pakiet2.Klasa

51

    Ukrywanie implementacji, hermetyzacja.

Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób.

Tylko wewnętrzne metody obiektu są uprawnione do zmiany jego stanu.

Każdy typ obiektu prezentuje innym obiektom swój "interfejs", który określa dopuszczalne metody współpracy.

53

  Do zmiennych i metod dostajemy się za pomocą nazwy.

Istnieją trzy wymiary dostępu do nazw:  Przestrzenie nazw ▪ Java używa sześciu różnych przestrzeni nazw: nazwy pakietu, typu, pola (zmiennej), metody, zmiennej lokalnej i etykiet  Zakresy ▪ Zakres to część klasy w której dana nazwa jest widoczna  Modyfikatory dostępu ▪ Modyfikatory dostępu określają prawa dostępu do nazw danej klasy 54

   

public

- można się doń dostać zewsząd (dostępne dla każdego)

protected

- można się doń dostać tylko z danej klasy i jej potomków (dostęp mają tylko dana klasa i klasy dziedziczące) brak (czyli ten domyślny) - można się doń dostać zewsząd w danym pakiecie (

public

dla składowych pakietu gdzie znajduje się element,

private

dla reszty)

private

- można się doń dostać tylko z obiektów danej klasy (tylko twórca klasy) 55

   Ochrona wewnętrznych operacji/danych przed ingerencją z zewnątrz.

Szczegóły istotne i nieistotne.

Wymiana implementacji klas bez wpływu na poprawność działania aplikacji.

56

 Definicja:

Porządkuje i wspomaga polimorfizm i enkapsulację dzięki umożliwieniu definiowania i tworzenia specjalizowanych obiektów na podstawie bardziej ogólnych. Dziedziczenie jest to relacja pozwalająca na wielokrotne użycie tego samego interfejsu

 Dla obiektów specjalizowanych nie trzeba redefiniować całej funkcjonalności, lecz tylko tę, której nie ma obiekt ogólniejszy.

58

     Dodawanie  Dodajemy do klasy potomnej nowe metody, często iteracyjnie.

Przesłanianie  Przesłaniamy metody klasy bazowej przez nowe implementacje metod.

Budowa jednej klasy na bazie drugiej, przez dodawanie/przesłanianie jej składowych:  nad-klasa – klasa bazowa  pod-klasa – klasa pochodna od bazowej Pod-klasa jest szczególnym rodzajem nad-klasy, W hierarchii klas, najpierw wywołujemy konstruktory nad klasy, potem pod-klasy.

59

} { class pod-klasa extends nad-klasa // treść klasy

 Każda pod-klasa posiada tylko jedną nad-klasę:     Java nie umożliwia wielo-dziedziczenia.

 Żadna klasa nie jest nad-klasą samej siebie.

Pod-klasa ma dostęp do wszystkich publicznych składowych swojej nad klasy, Pod-klasa nie ma dostępu do składowych prywatnych swojej nad-klasy, Składowa zadeklarowana jako private nie jest dostępna poza klasą w której jest zadeklarowana, wliczając jej pod-klasy.

60

} { class A { int i; void pokazi() System.out.println("i: " + i); { } } class B extends A } { { int j; void pokazj() System.out.println("j: " + j); } void suma() System.out.println("i + j: " + (i + j));

61

} { class ProsteDziedziczenie } { public static void main(String args[]) A a = new A(); B b = new B(); a.i = 10; a.pokazi(); b.i = 7; b.j = 8; b.pokazi(); b.pokazj(); b.suma();

62

 Do zmiennej nad-klasy można przypisać odwołanie do obiektu dowolnej pod-klasy.

class NadKlasa { ... } class PodKlasa extends NadKlasa { ... } NadKlasa o1; PodKlasa o2 = new PodKlasa(); o1 = o2

 Typ zmiennej, nie obiekt na który wskazuje ta zmienna, determinuje osiągalne składowe klasy.

63

   Kiedy metoda pod-klasy ma tą samą nazwę i typ jak metoda nad-klasy, wtedy mówimy że przesłania ją, Wersja metody dla nad-klasy zostaje ukryta,

Przesłanianie metod następuje tylko gdy nazwy i sygnatury dwóch metod są identyczne.

64

}

 Wywołanie konstruktora nad-klasy:

super(lista-parametrow)

 Musi być pierwszą instrukcją konstruktora podklasy:

class NadKlasa { ... } class PodKlasa extends NadKlasa { PodKlasa(...) { super(...); ...

} ...

  W hierarchii klas, najpierw wywołujemy konstruktory nad-klasy, potem pod klasy.

Jeżeli super() nie jest użyte, wywołuje się domyślny bez-parametrowy konstruktor każdej nad-klasy.

65

 Odwołanie do elementu nad-klasy:

super.pole

super.metoda()

 Stosowany szczególnie gdy składowe pod-klasy przesłaniają składowe nad-klasy o tych samych nazwach.

class A { void pokaz()… int i; }

Przesłonięcie pola i meody w nad-klasie:

class B extends A { } int i; void pokaz(){ super.pokaz(); B(int a, int b) { super.i = a; i = b;…}

66

   Przesłanianie umożliwia dynamiczne wywołanie metod.

Odwołanie do przesłoniętej metody przez zmienną super-klasy: Java ustala wersję metody na podstawie faktycznego typu obiektu wskazywanego przez zmienną.

Wykonywany kod decyduje się w czasie rzeczywistym, nie w czasie kompilacji.

67

   Metodę deklarowaną jako final w nad-klasie nie wolno przesłaniać w pod-klasie Jako że metoda final nie może zostać przesłonięta, podlega wczesnemu (wywołanie ustalone w trakcie kompilacji) wywołaniu - czasem używana do poprawiania wydajności systemu.

Klasa deklarowana jako final nie posiada potomków, nie wolno po niej dziedziczyć.

68

   Słowo polimorfizm oznacza wielopostaciowość. W programowaniu zorientowanym obiektowo mamy do czynienia ze wspólnym interfejsem klasy bazowej oraz różnymi postaciami dynamicznie wiązanych metod o tych samych nazwach w klasach pochodnych.

Referencje i kolekcje obiektów mogą dotyczyć obiektów różnego typu, a wywołanie metody dla referencji spowoduje zachowanie odpowiednie dla pełnego typu obiektu wywoływanego.

70

 

Definicja:

Polimorfizm możemy określić jako wirtualizację operacji; jest to możliwość dynamicznego (późnego, realizowanego w fazie wykonania) wiązania (ang. late binding, dynamic binding) nazwy operacji do wielu implementacji (metod) tej operacji w różnych klasach pozostających w relacji dziedziczenia.

Wybór implementacji zależy od nazwy metody oraz od typu dynamicznego tego obiektu, dla którego została wywołana operacja, a nie od typu zmiennej, wskazującej ten obiekt.

71

   Jeden interfejs, wiele zachowań:  nad-klasa definiuje wspólne metody dla pod-klas  pod-klasa dostarcza specyficzne implementacje dla niektórych z tych metod Swoboda definicji własnych metod przez pod klase, pod rygorem zachowania interfejsu dla tych metod.

Kombinacja dziedziczenia i przesłaniania: nad klasa opisuje format metod realizowanych przez pod-klasę.

72

   Kolejna metoda separacji interfejsu od implementacji, Polepsza organizację i czytelność kodu, Pozwala na tworzenie elastycznych programów, które mogą być rozwijane w miarę potrzeb, także później.

73

 Metoda dla której nie istnieje implementacja.

abstract typ nazwa(lista-parametrow);

Metody:  konkretne - mogą być przesłonięte przez pod klasy   abstrakcyjne - muszą zostać przesłonięte Nie wolno definiować abstrakcyjnych konstruktorów, ani metod statycznych.

75

 Klasa która posiada metody abstrakcyjne musi sama być deklarowana jako abstrakcyjna.

abstract class { ... }

  Klasa abstrakcyjna nie posiada obiektów; nie wolno używać operatora new na takiej klasie.

Pod-klasa klasy abstrakcyjnej:    implementuje wszystkie metody abstrakcyjne lub  jest sama deklarowana jako abstrakcyjna.

Nie wolno tworzyć obiektów klasy abstrakcyjnej.

Wolno tworzyć odwołania do klasy abstrakcyjnej.

76

Obiekt: Autobus -------------------- Uruchom() Zatrzymaj() W_prawo() W_lewo()

 

Definicja:

Interfejsem nazywamy zbiór operacji opisujących wymagane zachowania.

Interfejsy w Javie:  Interfejs to zbiór deklaracji metod bez ich implementacji,  Interfejs ustala jakie żądania można wysyłać pod adresem obiektu.

78

    Interfejs jest podobny do klasy która posiada tylko metody pozbawione implementacji.

wiele klas może implementować jeden interfejs jedna klasa może implementować wiele interfejsów Klasa implementuje dany interfejs jeśli dostarcza definicji dla wszystkich jego metod.

79

dostęp interface nazwa { typ metoda1(lista-parametrów); ...

typ metodaN(lista-parametrów); typ zmienna1 = wartość; ...

typ zmiennaM = wartość; }

  Dwa rodzaje dostępu:  public – może być użyty gdziekolwiek w programie  domyślny – dostępny tylko w bieżącym pakiecie Zmiennie są static, final, inicjowane stałą.

80

 Ogólna postać definicji klasy:

} dostęp class nazwa extends nad-klasa implements interfejs1, ..., interfejsN { ...

  Dostęp public lub domyślny.

Metody implementujące interfejs muszą być public, oraz posiadać dokładnie ten sam typ jak w interfejsie.

81

 Deklaracja zmiennej której typem jest interfejs:

MojInterfejs mi;

 Przez zmienną której typem jest interfejs można wywołać   dowolną metodę w tym interfejsie.

Nie można wywołać metody która nie jest w interfejsie.

Wartością zmiennej może być odwołanie do obiektu dowolnej klasy która implementuje ten interfejs.

class Klasa implements MojInterfejs { ... } MojInterfejs mi = new Klasa();

82

  Polimorfizm przez Interfejs.

Klasa, która zawiera interfejs, ale nie implementuje wszystkich jego metod, musi być abstrakcyjna.

 Jeden interfejs może dziedziczyć po innym:

interface A { void metoda1(); void metoda2(); } } interface B extends A { void metoda3();

 Klasa implementująca musi dostarczyć definicji dla wszystkich metod w kolejnych interfejsach.

83

  Obsługa błędów wymuszona przez język programowania:  wyjątek jest obiektem,  sygnalizowany z miejsca błędu,  przechwytywany przez odpowiednią procedurę obsługi.

Czym jest wyjątek ?

Alternatywna ścieżka sterowania programu, w przypadku wykrycia błędów.

85

Cechy:

 Kilka wykonań równoległych.

 Wielowątkowość jest częścią języka.

   Wątek jest obiektem.

Blokowanie obiektów współdzielonych.

Programowanie niezależne od faktycznej liczby procesorów.

86

} { class Wyswietl public static void main(String args[]) { String s = “1 mila to ”; double d = 1.609; System.out.print(s); System.out.print(d); System.out.print(“ kilometrow\n”); }

89

} import java.io.*; class Przyjmowanie { public static void main(String args[]) { String input = “”; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println(“Wpisz tekst: “); try { input = in.readLine(); } catch(IOException e) { System.out.println(e); } System.out.print(“Wpisales: “); System.out.println(input); }

90