w3 java

w3 java, informatyka, Wykłady Java B.Pańczyk
[ Pobierz całość w formacie PDF ]
Definiowanie klas
JAVA
Programowanie obiektowe
• w klasie określamy właściwości obiektów (dane
związane z obiektami) oraz operacje, które na tych
obiektach (a więc na zawartych w nich danych)
moŜna wykonać
• dane są reprezentowane przez
pola
klasy - są to
zmienne lub stałe określonych typów odpowiednio
zadeklarowane
• operacje wprowadzamy poprzez definicję
metod
klasy
• zestaw metod klasy nazywamy jej
interfejsem
Beata Pańczyk - Java (Wykład 3)
2
Definicja metody - schemat
Definicja klasy - przykład 1
TypWyniku NazwaMetody(lista_parametrów)
{
class Para{
int a;
// to s
ą
dane zwane polami klasy
int b;
...
void dodaj(Para p){
... //
instrukcje wykonywane po wywołaniu metody
}
• lista parametrów zawiera oddzielone przecinkami
deklaracje parametrów wejściowych; lista moŜe być
pusta
• metoda moŜe zwracać wynik typu
TypWyniku
lub
nie zwracać Ŝadnego wyniku (wtedy jej typ wyniku
określamy słowem kluczowym
void
)
//metoda klasy
...}
//dodaje pary
void pokaz() {
//metoda klasy
...}
//pokazuje par
ę
} //koniec definicji klasy Para
3
4
Konstruktor
Przykłady konstruktorów
• specjalną operacją jest operacja tworzenia obiektu
danego typu, czyli nadanie odpowiednich wartości
jego polom
• sposób tworzenia obiektu określa
konstruktor
-
szczególna metoda klasy, której
deklaracja nie
ma
Ŝ
adnego typu wyniku
(nawet void) a jej
nazwa jest nazw
ą
klasy
class Para{
int a,b;
Para(int x,int y)
{
class Para{
int a,b;
Para(int x)
{
a=x;
b=y;
a=x;
b=x;
}
...
}
...
}
}
5
6
1
Tworzenie obiektów
Tworzenie obiektów - przykład
• obiekty są tworzone wyraŜeniem
new
poprzez
wywołanie konstruktora odpowiedniej klasy
• tworzenie obiektu - sposób 1
TypObiektu identyfikator = new
NazwaKlasy (argumenty);
• tworzenie obiektu - sposób 2
TypObiektu identyfikator;
...
identyfikator=new NazwaKlasy(argumenty);
• tworzymy dwa obiekty klasy Para
Para p1=new Para(1,2);
Para p2; p2=new Para(3,4);
• obiekty mają postać
obiekt p1:
obiekt p2:
Pola: int a; (=1)
Pola: int a; (=3)
int b; (=2)
int b; (=4)
Metody:
Metody:
void dodaj(...)
void dodaj(...)
void pokaz(...)
void pokaz(...)
7
8
Komunikowanie si
ę
z obiektami
Przykład 1 - pełna definicja klasy
class Para
{ int a, b; // pola klasy
/* metody czyli interfejs klasy: */
Para (int x,int y)
• identyfikatory pól i metod są takie same dla
wszystkich obiektów danej klasy zatem naleŜy
wskazać o który obiekt nam chodzi
// konstruktor klasy
{ a=x;
b=y;
p1.a; //odwołanie do pola a obiektu p1 (=1)
p2.a; //odwołanie do pola a obiektu p2 (=3)
p1.pokaz();// obiektowi p1 wysyłamy komunikat
// pokaz() (poka
Ŝ
si
ę
) czyli wywołujemy
// metod
ę
pokaz() dla obiektu p1
// pokazuje (1,2)
p2.pokaz();//poka
Ŝ
obiekt p2
//pokazuje (3,4)
}
void dodaj(Para p)
// dodaje pary
{ a=a+p.a;
b=b+p.b;
}
void pokaz() // pokazuje par
ę
{ System.out.println(" (" + a + ", " + b + " ) " );
}
} // koniec definicji klasy
9
10
Przykład 1- zastosowanie klasy Para
Słowo kluczowe this
class AppPara
{
• w poniŜszym przykładzie nazwy parametrów
a
i
b
metody
dodaj
są takie same (przesłaniają) nazwy pól klasy
class Para {
int a,b;
...
void dodaj(int a, int b){
... }
public static void main(String [ ] args)
{
Para p1=new Para(10,20);
Para p2=new Para(1,2);
p1.pokaz();
// wypisze (10, 20 )
}
• metodę
dodaj
naleŜy zdefiniować
void dodaj(int a, int b) { this.a+=a; this.b+=b; }
oznacza to, Ŝe do pól TEGO (this) obiektu (na rzecz
którego wywołano metodę) naleŜy dodać odpowiednio
wartości argumentów a i b
p2.pokaz();
// wypisze (1, 2 )
p1.dodaj(p2);
p1.pokaz();
// wypisze ( 11, 22 )
}
}
11
12
2
Słowo kluczowe this
Statyczne składowe klasy
• jeśli metoda musi zwrócić ten obiekt na rzecz którego
została wywołana to równieŜ konieczne jest zastosowanie
słowa
this
Para dodaj(Para p) {
a+=p.a; b+=p.b;
return this; //zwraca ten obiekt na rzecz,
//którego wołano metod
ę
dodaj
• pola i metody klasy mogą być statyczne i nie
statyczne; nie statyczne wiąŜą się z istnieniem
obiektu danej klasy
• składowe statyczne (pola i metody) są
deklarowane przy uŜyciu specyfikatora
static
i
mogą być uŜywane nawet gdy nie istnieje Ŝaden
obiekt klasy
• ze statycznych metod nie wolno odwoływać się do
nie statycznych składowych klasy (obiekt moŜe
nie istnieć)
}
• po takiej definicji metody moŜna (po utworzeniu obiektów
p, p1, p2, p3) napisać
p.dodaj(p1).dodaj(p2).dodaj(p3); //z lewej do prawej
//równowa
Ŝ
ne z p.dodaj(p1); p.dodaj(p2); p.dodaj(p3);
13
14
Składowe statyczne - przykład
Składowe statyczne - przykład
• dodajemy do klasy Para pole zliczające ile razy były
tworzone obiekty Para; nie powinno ono naleŜeć do
Ŝadnego obiektu - liczba utworzonych par jest właściwością
samej klasy
class Para {
static int licz = 0; // pole statyczne
int a, b;
Para (int x, int y) { licz++; a = x; b = y; }
static void pokaz_licz( ) { //metoda statyczna
System.out.println("Liczba utworzonych par"+licz);
Para p1=null,
// inicjalizacja odniesieniem pustym
p2=null;
// p1 i p2 nie odnosz
ą
si
ę
do
Ŝ
adnego obiektu
if (Para.licz == 0) Para p1=new Para(1, 1);
else
while (Para.licz<10) {
p2=new Para(2,2);
p1.dodaj(p2); }
System.out.println(p1.licz);
Para.pokaz_licz(); //wywołanie metody statycznej
p1.pokaz_licz();
p2.pokaz_licz();
}
...
}
15
16
Pole statyczne klasy System
• W klasie
System
pakietu
java.lang
zadeklarowano
statyczne pole typu
PrintStream
(obiekt klasy
PrintStream związany ze standardowym wyjściem)
public class System{ ...
public static PrintStream out;
... }
• w klasie
PrintStream
pakietu
java.io
zdefiniowano
metodę
println
, wypisującą wiersz podany jako argument
public class PrintStream{ ...
public void println(String s) { ... }
... }

System.out
- statyczne pole o ident. out (obiekt klasy
PrintStream),
println(...)
- uŜycie metody na rzecz tego
obiektu - razem otrzymujemy
System.out.println(...)
Specyfikatory dost
ę
pu
KaŜda składowa klasy moŜe być:

private
- prywatna, dostępna tylko w danej klasie

protected
- chroniona lub zabezpieczona, dostępna z
danej klasy i wszystkich klas ją dziedziczących

public
- publiczna, dostępna zewsząd
• zaprzyjaźniona, nie poprzedzona Ŝadnym specyfikatorem,
dostępna ze wszystkich klas danego pakietu (tzw. dostęp
pakietowy lub domyślny)
KaŜda klasa moŜe być:

public
- publiczna, dostępna zewsząd (z innych pakietów)
• pakietowa, dostępna tylko z klas pakietu
17
18
3
Specyfikatory dost
ę
pu - przykład
class Para {
private int a; private int b;
private void ustalA(int x) { a = x ;}
private void ustalB(int y) { b = y ;}
void ustalAB(int a, int b) { ustalA(a); ustalB(b); }
Inicjalizacja pól
Przy tworzeniu obiektu:

pola klasy
mają zagwarantowaną inicjalizację na
wartości ZERO (tzn. 0 – dla liczb, '\0' – dla
łańcuchów, false - dla typu boolean, null - dla typów
obiektowych)
• zwykle w konstruktorze dokonuje się reinicjalizacji
pól
• moŜna równieŜ posłuŜyć się jawną inicjalizacją przy
deklaracji pól
}
class Test1{
public static void main(String [ ] args) {
Para p=new Para();
p.a=1; // bł
ą
d: niedost
ę
pne pole
p.ustalA(1); // bł
ą
d: niedost
ę
pna metoda
p.ustalAB(20,21); // OK
}
}
19
20
Inicjalizacja pól - przykład
class Para {
static String text=" Pary "; //inicjalizacja
static int x=-1;
int a=x+1; //w inicjalizacji moŜna korzystać z wyraŜeń
int b=x+1; // i wywołania metod
Para( ) { a++; b++; }
void pokaz( ) { System.out.println("( "+a+","+b+" )"); }
Inicjalizacja pól - reguły
• kaŜde odwołanie do klasy inicjalizuje najpierw
pola statyczne
• tworzenie obiektu (new) inicjalizuje pola nie
statyczne, po czym wykonywany jest konstruktor
• kolejność inicjalizacji pól - według ich kolejności
w definicji klasy (najpierw statyczne)

zmienne lokalne
(zmienne pomocnicze metody,
parametry metody) nie mają zagwarantowanej
inicjalizacji
}
class Test2{
public static void main (String [ ] arg) {
Para p=new Para();
p.pokaz();
//wyprowadzi (1 ,1 )
}
}
21
22
Inicjalizacja pól - przykład
Przeci
ąŜ
anie metod
• przeciąŜanie metod - moŜliwość definicji w jednej klasie
metod o tej samej nazwie, ale róŜniących się liczbą i/lub
typami argumentów
• dzięki przeciąŜaniu moŜemy w klasie
Para
(o polach
a
i b)
zdefiniować metody:
void dodaj ( Para p ) { a+=p.a; b+=p.b; }
void dodaj ( int i ) { a+=i; b+=i; }
void dodaj ( int i, int k ) { a+=i; b+=k; }
i wykorzystać je na przykład następująco:
Para p=new Para(11,12), p2=new Para(10,20);
p.dodaj(3);
//wybierana jest ta metoda,
p.dodaj(1, 2);
//która pasuje najlepiej do argumentów
p.dodaj(p2);
class Para {
static String text="Pary";
int a=x+1;
int b=x+1;
Para( ) { ... }
...
static int x=-1;
}
• uŜycie
x+1
w inicjalizacji
a
i
b
było dopuszczalne gdyŜ
pole
x
jest statyczne i mimo iŜ w definicji klasy występuje
później, to jego wartość jest juŜ ustalona
23
24
4
Przeci
ąŜ
anie konstruktorów
Przeci
ąŜ
anie konstruktorów -przykład
• przeciąŜanie konstruktorów daje moŜliwość określania

Ŝ
nych
sposobów budowy obiektów
• jeśli klasa nie ma jawnie zdefiniowanego konstruktora to
do definicji klasy automatycznie dodawany jest
konstruktor domyślny, bezparametrowy a niestatyczne
pola klasy są inicjalizowane według podanych w ich
deklaracjach inicjalizatorów lub wartościami ZERO (0,
false, null)
• jeśli zdefiniowaliśmy jakikolwiek konstruktor to
konstruktor bezparametrowy nie jest juŜ automatycznie
dodawany i musimy go sami zdefiniować
class Para{
...
Para()
//konstruktor bezparametrowy
{ x=-1; y=-1; }
Para( int x)
// pola inicjalizowane t
ą
sam
ą
liczb
ą
{ a=x; b=x; }
Para (int x, int y)
// pola inicjalizowane innymi liczbami
{ a=x; b=y; }
...
}
25
26
Konstrukcja this
Ponowne wykorzystanie klas
• koncepcja ponownego wykorzystania klas polega na
uŜyciu gotowych fragmentów oprogramowania (klas) do
budowy innych klas
• gotowe klasy moŜemy wykorzystać na dwa sposoby:
poprzez
kompozycj
ę i poprzez
dziedziczenie
class Para {
int a,b;
Para (int x, int y) {a=x; b=y; }
void dodaj(Para p) { a+=p.a; b+=p.b }
void pokaz( ) {
System.out.println(" (" + a + ", " + b + " ) " ); }
• konstruktor moŜe być wywołany z innego konstruktora za
pomocą konstrukcji
this(lista_argumentów);
(musi to być pierwsza instrukcja w ciele konstruktora):
• na przykład:
Para ( ) { this(1); }
Para (int x) { this(x,x); }
Para (int x, int y) { a=x; b=y; }
}
27
28
Kompozycja - przykład
Kompozycja - przykład
class ParaKomp {
String nazwa;
// obiekt String zawarty w obiekcie ParaKomp
Para p;
//obiekt Para zawarty w obiekcie ParaKomp
ParaKomp( String s, int x, int y) {
//konstruktor
nazwa=s;
p=new Para(x,y);
//tworzenie obiektu Para
• po zdefiniowaniu klasy
ParaKomp
obiekty i
metody tej klasy moŜna wykorzystać w innej
klasie:
ParaKomp pk1 = new ParaKomp("Ak",10,20);
ParaKomp pk2 = new ParaKomp("Bk",11,21);
pk1.pokaz ( );
pk1.dodaj (pk2 );
pk1.pokaz ( );
}
void dodaj ( ParaKomp pk ) { p.dodaj ( pk.p ) }
void pokaz ( ) {
System.out.println( nazwa );
p.pokaz ( );
}
}
29
30
5
[ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • diabelki.xlx.pl
  • Podobne
    Powered by wordpress | Theme: simpletex | © Spojrzeliśmy na siebie szukając słów, które nie istniały.