programowanie obiektowe

19
Programowani e obiektowe Andrzej Ziółkowski Wykład 3

Upload: nydia

Post on 05-Jan-2016

68 views

Category:

Documents


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

Page 1: Programowanie obiektowe

Programowanie obiektoweAndrzej Ziółkowski

Wykład 3

Page 2: Programowanie obiektowe

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

Page 3: Programowanie obiektowe

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 {…{

Page 4: Programowanie obiektowe

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

Page 5: Programowanie obiektowe

Pakiety standardowe - dokumentacja

Page 6: Programowanie obiektowe

Pakiety standardowe - dokumentacja

Page 7: Programowanie obiektowe

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.

Page 8: Programowanie obiektowe

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

Page 9: Programowanie obiektowe

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

Page 10: Programowanie obiektowe

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}

Page 11: Programowanie obiektowe

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

Page 12: Programowanie obiektowe

Interfejs - przykładClass Plik {

void Otwórz() {…}

void Długość() {…}

void Dodaj(int id,string tekst) {…}

void Usuń(int id) {…}

Void Zamknij() {…}

}

Page 13: Programowanie obiektowe

Deklarowanie interfejsuinterface NazwaInterfejsu {

final typ nazwaPola1;

final typ nazwaPolaN;’

typ nazwaMetody1(typ parametr1,…);

typ nazwaMetodyN(typ parametr1,…);

}

Page 14: Programowanie obiektowe

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

Page 15: Programowanie obiektowe

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;

Page 16: Programowanie obiektowe
Page 17: Programowanie obiektowe
Page 18: Programowanie obiektowe

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

Page 19: Programowanie obiektowe

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