Programowanie obiektowe

Post on 05-Jan-2016

66 views 0 download

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 Presentation

Transcript of Programowanie obiektowe

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); }