Język obiektowy Wykład 13 Programowanie obiektowe z lotu ptaka, str 1 James Gosling, Mike Sheridan, Patrick Naughton Sun Microsystems 1995(20latmłodszyodC) C jest językiem proceduralnym Java jest językiem obiektowym Języki obiektowe zawierają wszystko potrzebne do programowania proceduralnego, i jeszcze więcej Wykład 13 Programowanie obiektowe z lotu ptaka, str 2 Uruchomienie programu w Jawie Kompilacja javac progjava powoduje wyprodukowanie kilku plików o rozszerzeniu class, min Mainclass wykonanie: java Main
Wykład 13 Programowanie obiektowe z lotu ptaka, str 3 Czego brakuje strukturom w C typedef struct { int licz, mian; void skracanie() { int nwd=najwwspdz(licz,mian); licz = licz/nwd; mian = mian/nwd; } prywatne intnajwwspdz(intn,intk) { while(n!=k) if(n<k) k-=n; else n-=k; return n; } } ulamek; WCniemamożliwości umieszczenia wewnątrz struktury funkcji obsługującej pola tej struktury; ukrycia funkcji pomocniczej wewnątrz struktury, żeby nie była widoczna poza tą strukturą ulameku={-2,4}; uskracanie(); Wykład 13 Programowanie obiektowe z lotu ptaka, str 4 patrz plik Ulamki1java WJawie: Strukturom odpowiadają klasy(np klasa Ulamek) Klasa jest złożonym typem danych; może zawierać wartości( własności ) jakwc(nplicz);oraz funkcje( metody ) w przeciwieństwie do C(np skracanie) Klasa może mieć własności i metody do użytku wewnętrznego, niewidoczne dla programu oznaczone private(np najw wsp dz) Pozadeklarowaniuklasy classnazwaklasy {} możemy w zwykły sposób deklarować zmienne: Nazwa klasy nazwa zmiennej; Działają zwykłe deklaracje z inicjalizacją: Nazwa klasy nazwa zmiennej = konkretny obiekt;
Wykład 13 Programowanie obiektowe z lotu ptaka, str 5 patrz plik Ulamki1java WJawie: Jedną(lub więcej) z metod klasy jest zwykle konstruktorem obiektów tejklasymaonanazwętakąsamąjaknazwaklasyiniejestpoprzedzona typem wynikowym(ani void-em) jej typem wynikowym jest definiowana klasa Konstruktor służy do tworzenia i inicjalizowania obiektów klasy Np Ulamekul=newUlamek(3,4); Ulamek: Ulamek ullicz ulmian ulskracanie Wykład 13 Programowanie obiektowe z lotu ptaka, str 6 patrz plik Ulamki1java Co z klasy Ulamek widzi program używający jej obiektów? Ulamek: Ulamek ullicz ulmian ulskracanie całkowity licz licznik ułamka całkowity mian mianownik ułamka konstruktor Ulamek(intll,intmm) tworzącyułamekzpodanego licznika i mianownika metoda skracanie() upraszczająca ułamek Metoda najw wsp dz jest prywatna, więc niewidoczna z zewnątrz
Wykład 13 Programowanie obiektowe z lotu ptaka, str 7 RóżnicamiędzyfunkcjamiwCimetodamiwJavie FunkcjawCdziałanawszystkiewartościtegosamegotypu Metoda w Jawie należy do konkretnego obiektu; metoda innego obiektu tej samej klasy może działać inaczej Metoda jakiegoś obiektu może być wywołana bez argumentów; np ulskracanie(); powoduje uproszczenie ulamka ul Ułamki, cd Wykład 13 Programowanie obiektowe z lotu ptaka, str 8 Program na dodawanie ułamków: patrz plik Ulamki2java Wyjście: Systemoutprint(); Łączenie(konkatenacja) napisów: znak +
Ułamki, cd Wykład 13 Programowanie obiektowe z lotu ptaka, str 9 Program na dodawanie ułamków: patrz plik Ulamki2java Wejście: Potrzebna jest biblioteka: import javautilscanner; Trzeba utworzyć obiekt klasy Scanner: Scanner czytnik = new Scanner(Systemin); Przeczytanie jednego wiersza z klawiatury: String napis = czytniknextline(); Czytanie liczby z napisu: int liczba = IntegerparseInt(napis); double liczba = DoubleparseDouble(napis); Wykład 13 Programowanie obiektowe z lotu ptaka, str 10 Bardziej skomplikowany program: lista płac patrzplik Listaplacjava Komendy if for while dowhile switch jakwc Nowetypy: String odpowiadachar*zc Boolean zawiera wartości logiczne true i false mogące występować w warunkach if-ów i while-ów Nowetypy:klasaArrayList<> nieograniczonatablicazoperacjami: size liczba elementów listy get wybieranie elementu o podanym indeksie add dodawanie nowego elementu remove usuwanie elementu o podanym indeksie
Wykład 13 Programowanie obiektowe z lotu ptaka, str 11 Bardziej skomplikowany program: lista płac patrzplik Listaplacjava Stare typy w nowym opakowaniu: jestint(tylkotyp) aleteżnowyinteger(klasa) jestdouble(tylkotyp) aleteżnowydouble(klasa) jestchar(tylkotyp) aleteżnowycharacter(klasa) Stare typy w nowym opakowaniu: deklaracja tablicy liczb całkowitych: int[] tab; na razie liczba jej elementów jest nieustalona; ustalenie długości zadeklarowanej tablicy: tab = new int[15]; ciągle jest wypełniona śmieciami; deklaracja tablicy z inicjalizacją: int[]tab={1,5,-3,0}; długość tablicy: tablength Wykład 13 Programowanie obiektowe z lotu ptaka, str 12 Jeszcze bardziej skomplikowany program: robale patrz plik Robalejava Każdy owad jest obiektem klasy Robale Poszczególne owady różnią się kolorem, prędkością biegania i trasą biegania Cała informacja dotycząca wyglądu i biegu poszczególnego owada zapisanajestwyłączniewnimsamym tylkosamowadwie,jakpowinien się wyświetlać i ruszać
Wykład 13 Programowanie obiektowe z lotu ptaka, str 13 Jeszcze bardziej skomplikowany program: robale patrz plik Robalejava Biblioteki do grafiki: javaxawt* i javaxswing* Biblioteki do reagowania na wydarzenia (w tym programie tylko na upływ czasu): javaxawtevent* Wprogramiegłównym(czyliwmetodzie main klasy Main) ustalasięcechyoknaidodajesiędoniegoobrazekzdefiniowanyw innej klasie Konstruktor klasy Obrazek tworzy robale; a następnie włącza stoper i określa, co się ma zdarzyć po upłynięciu określonego czasu(potrzebne doanimacji) masięzmienićstanlicznikaczasu,owadymająsięo niej dowiedzieć, i obrazek ma zostać namalowany na nowo Metoda paintcomponent wywołuje metody poszczególnych owadów, służące do ich namalowania Wykład 13 Programowanie obiektowe z lotu ptaka, str 14 Jeszcze bardziej skomplikowany program: robale patrz plik Robalejava Ruch pojedynczego i-tego owada: r i (t)= ( cos(2π(i+1)t),sin(2π(2i+1)t) ) więcwtrakciejednegoprzebieguparametrutod0do1,owadi-typrzebiega i+1razyodprawejścianydolewejizpowrotem, 2i+1razyodgórnejścianydodolnejizpowrotem i i+1 2i+1 0 1 1 okrąg 1 2 3 2 3 5