190 likes | 354 Views
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
E N D
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 • 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.niojava.nio.channelsjava.nio.channels.spijava.nio.charsetjava.nio.charset.spijava.rmijava.rmi.activationjava.rmi.dgcjava.rmi.registryjava.rmi.serverjava.securityjava.security.acljava.security.certjava.security.interfacesjava.security.specjava.sqljava.textjava.text.spijava.utiljava.util.concurrentjava.util.concurrent.atomicjava.util.concurrent.locksjava.util.jarjava.util.loggingjava.util.prefsjava.util.regexjava.util.spijava.util.zip java.appletjava.awtjava.awt.colorjava.awt.datatransferjava.awt.dndjava.awt.eventjava.awt.fontjava.awt.geomjava.awt.imjava.awt.im.spijava.awt.imagejava.awt.image.renderablejava.awt.printjava.beansjava.beans.beancontextjava.iojava.langjava.lang.annotationjava.lang.instrumentjava.lang.managementjava.lang.refjava.lang.reflectjava.mathjava.net
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(); • 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ł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; // poprawne klasaA.global1 = 0; // błąd, najpierw trzeba utworzyć obiekt tej klasy klasaA a = new klasaA(); a.local1 = 10; // błąd, local1 jest niewidoczne w klasie B a.global1 = 50; // poprawne a.vat2 = 7; // 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); • }