Programowanie obiektowe

advertisement
Programowanie
obiektowe
Andrzej Ziółkowski
Wykład 3
Pakiety
Pakiet – zbiór powiązanych ze sobą klas.
Potrzeba wprowadzenia pakietów w języku
Java
 Wprowadzenie uporządkowania i
hierarchii klas w dużych projektach
 Rozwiązanie problemu powtarzających
się nazw klas
 Dystrubucja, pakiety od różnych
producentów
Struktura pliku definiującego klasę

Deklaracja przynależności do pakietu


Deklaracja użycia innych pakietów


opcjonalna, przykład:
import nazwaPakietu1.nazwaPakietu2.nazwaKlasy1;
import nazwaPakietu1.nazwaPakietu3.*;
Deklaracja klasy publicznej


opcjonalna, przykłąd:
pakage nazwaPakietu1.nazwaPakietu2;
obowiązkowa, przykład:
public class nazwaKlasy {…}
Deklaracja klas prywatnych

opcjonalna, przykład:
private class nazwaKlasy {…{
Pakiety standardowe
(http://java.sun.com/javase/reference/api.jsp)
java.applet
java.awt
java.awt.color
java.awt.datatransfer
java.awt.dnd
java.awt.event
java.awt.font
java.awt.geom
java.awt.im
java.awt.im.spi
java.awt.image
java.awt.image.renderable
java.awt.print
java.beans
java.beans.beancontext
java.io
java.lang
java.lang.annotation
java.lang.instrument
java.lang.management
java.lang.ref
java.lang.reflect
java.math
java.net
java.nio
java.nio.channels
java.nio.channels.spi
java.nio.charset
java.nio.charset.spi
java.rmi
java.rmi.activation
java.rmi.dgc
java.rmi.registry
java.rmi.server
java.security
java.security.acl
java.security.cert
java.security.interfaces
java.security.spec
java.sql
java.text
java.text.spi
java.util
java.util.concurrent
java.util.concurrent.atomic
java.util.concurrent.locks
java.util.jar
java.util.logging
java.util.prefs
java.util.regex
java.util.spi
java.util.zip
Pakiety standardowe - dokumentacja
Pakiety standardowe - dokumentacja
Modyfikatory
Słowa kluczowe występujące przed
deklaracjami klas, pól i metod
określające zakres widzialności elementu
lub uściślające sposób działania.
Wszystkie modyfikatory są opcjonalne.
Pozwalają kontrolować (ograniczyć lub
zwiększyć) zakres widzialności różnych
elementów (hermetyzacja) dzięki czemu
można uniknąć wielu błędów.
Modyfikatory dostępu




private – element widoczny tylko w
klasie, w której został zadeklarowany
protected – jak wyżej oraz we
wszystkich podklasach
--- (bez modyfikatora) – widoczny we
wszystkich klasach pakietu, w którym
został zadeklarowany
public – widoczny wszędzie, również w
klasach z innych pakietów
Modyfikatory określające cechy

static – można używać bez tworzenia egzemplarza
obiektu np. nazwaKlasy.mazwaMetody();



final – nie mogą być zmienne




pola – we wszystkich obiektach mają taką samą wartość
metody – działają dokładnie tak samo dla każdego
egzemplarza obiektu, mogą korzystać tylko z pól
statycznych
pola – stałe wartości określane w momencie deklaracji
metody – nie mogą być zmieniane w klasach
wywiedzionych z klasy gdzie zostały zadeklarowane
klasy – nie mogą być rozszerzane przez dziedziczenie
abstract – implementacja w klasie wywiedzionej
Modyfikatory - przykład
public class klasaA {
private int local1;
public int global1;
public static int vat1;
public final int vat2=22;
…
}
public class klasaB {
…
void Create() {
klasaA.vat1 = 22;
klasaA.global1 = 0;
klasaA a = new klasaA();
a.local1 = 10;
a.global1 = 50;
a.vat2 = 7;
}
// poprawne
// błąd, najpierw trzeba utworzyć obiekt tej klasy
// błąd, local1 jest niewidoczne w klasie B
// poprawne
// błąd, nie można zmienić wartości vat2
Interfejsy
Interfejs – wydzielona część deklaracji klasy
bez implementacji
Tworząc oprogramowanie określamy
dokładnie w jaki sposób klasy będą się
między sobą komunikowały.
Jedna klasa implementuje interfejs tzn. musi
zawierać wszystkie metody z dokładnie
takimi samymi parametrami jak
zadeklarowane w interfejsie.
Druga klasa korzysta jedynie z metod
określonych w interfejsie
Interfejs - przykład
Class Plik {
…
void Otwórz() {…}
void Długość() {…}
void Dodaj(int id,string tekst) {…}
void Usuń(int id) {…}
Void Zamknij() {…}
…
}
Deklarowanie interfejsu
interface NazwaInterfejsu {
final typ nazwaPola1;
…
final typ nazwaPolaN;’
typ nazwaMetody1(typ parametr1,…);
…
typ nazwaMetodyN(typ parametr1,…);
}
Interfejs jako typ parametru
interface Rekord {
void Dodaj(int id, string tekst);
void Usuń(int id);
}
Class Plik1 implements Rekord {
…
void Dodaj(int id,string tekst) {…}
void Usuń(int id) {…}
}
…
void Dopisz(Rekord rek, int id, string tekst) {
…
rek.Dodaj(id,tekst);
…
}
Wykorzystanie interfejsu do deklarowania
stałych symbolicznych
interface Dzień {
final string Pon = „Poniedziałek”;
final string Wt = „Wtorek”;
final string Śr = „Środa”;
final string Czw = „Czwartek”;
final string P = „Piątek”;
final string Sob = „Sobota”;
final string N = „Niedziela”;
}
Użycie:
string dzień = Dzień.Wt;

package magazyn;

public class Magazyn {
protected String[] nazwyTowarów;
protected int[] ilościTowarów;
protected int[] ilościZamówione;




/** Creates a new instance of magazyn */
public Magazyn() {
}




public void WczytajStan() {
// wpisz dane do testowania zamiast wczytania z pliku lub bazy danych
nazwyTowarów = new String[] {"Motorola RAZR V3","NOKIA 6131","Sony Ericsson K510i",
"Samsung SGH-X160","Alcatel OT C550"};
ilościTowarów = new int[] {20,57,31,38,125};
ilościZamówione = new int[] {0,5,0,8,0};
}








public String Nazwa(int n) {
if (n < nazwyTowarów.length)
return nazwyTowarów[n];
else
return null;
}







public int Ilość(int n) {
if (n < nazwyTowarów.length)
return ilościTowarów[n];
else
return 0;
}







}






















private void butZamówMouseClicked(java.awt.event.MouseEvent evt) {
javax.swing.DefaultComboBoxModel model =
new javax.swing.DefaultComboBoxModel(magazyn.nazwyTowarów);
cbNazwaTowaru.setModel(model);
textIlość.setText("0");
dlgZamów.setVisible(true);
int i = cbNazwaTowaru.getSelectedIndex();
String s = textIlość.getText();
int v = Integer.valueOf(s).intValue();
magazyn.ilościZamówione[i] += v;
}
private void butStanMagazynuMouseClicked(java.awt.event.MouseEvent evt) {
javax.swing.DefaultListModel model1 = new javax.swing.DefaultListModel();
for (int i=0; i < magazyn.nazwyTowarów.length; i++)
model1.addElement(magazyn.nazwyTowarów[i]);
listaTowarów.setModel(model1);
javax.swing.DefaultListModel model2 = new javax.swing.DefaultListModel();
for (int i=0; i < magazyn.ilościTowarów.length; i++)
model2.addElement(magazyn.ilościTowarów[i]);
listaIlości.setModel(model2);
dlgStanMagazynu.setVisible(true);
}
Download