programowanie obiektowe
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
Programowanie obiektoweAndrzej Ziółkowski
Wykład 3
PakietyPakiet – 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
opcjonalna, przykłąd: pakage nazwaPakietu1.nazwaPakietu2;
Deklaracja użycia innych pakietów opcjonalna, przykład:
import nazwaPakietu1.nazwaPakietu2.nazwaKlasy1;import nazwaPakietu1.nazwaPakietu3.*;
Deklaracja klasy publicznej 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.prefsjava.util.regexjava.util.spijava.util.zip
Pakiety standardowe - dokumentacja
Pakiety standardowe - dokumentacja
ModyfikatorySł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(); 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
final – nie mogą być zmienne 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ładpublic 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; // poprawneklasaA.global1 = 0; // błąd, najpierw trzeba utworzyć obiekt tej klasyklasaA a = new klasaA();a.local1 = 10; // błąd, local1 jest niewidoczne w klasie Ba.global1 = 50; // poprawnea.vat2 = 7; // błąd, nie można zmienić wartości vat2}
InterfejsyInterfejs – wydzielona część deklaracji klasy
bez implementacjiTworzą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ładClass Plik {
…
void Otwórz() {…}
void Długość() {…}
void Dodaj(int id,string tekst) {…}
void Usuń(int id) {…}
Void Zamknij() {…}
…
}
Deklarowanie interfejsuinterface NazwaInterfejsu {
final typ nazwaPola1;
…
final typ nazwaPolaN;’
typ nazwaMetody1(typ parametr1,…);
…
typ nazwaMetodyN(typ parametr1,…);
}
Interfejs jako typ parametruinterface 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); }