Wykład 15. Programowanie obiektowe z lotu ptaka, str. 1 Język obiektowy James Gosling, Mike Sheridan, Patrick Naughton Sun Microsystems 1995 (20 lat młodszy od C) Wykład 15. Programowanie obiektowe z lotu ptaka, str. 1 Język obiektowy James Gosling, Mike Sheridan, Patrick Naughton Sun Microsystems 1995 (20 lat młodszy od C) • C jest językiem proceduralnym Wykład 15. Programowanie obiektowe z lotu ptaka, str. 1 Język obiektowy James Gosling, Mike Sheridan, Patrick Naughton Sun Microsystems 1995 (20 lat młodszy od C) • C jest językiem proceduralnym • Java jest językiem obiektowym Wykład 15. Programowanie obiektowe z lotu ptaka, str. 1 Język obiektowy James Gosling, Mike Sheridan, Patrick Naughton Sun Microsystems 1995 (20 lat młodszy od C) • 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 15. Programowanie obiektowe z lotu ptaka, str. 2 Uruchomienie programu w Jawie Wykład 15. Programowanie obiektowe z lotu ptaka, str. 2 Uruchomienie programu w Jawie • Kompilacja javac prog.java Wykład 15. Programowanie obiektowe z lotu ptaka, str. 2 Uruchomienie programu w Jawie • Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu .class , m.in. Main.class Wykład 15. Programowanie obiektowe z lotu ptaka, str. 2 Uruchomienie programu w Jawie • Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu .class , m.in. Main.class • wykonanie: java Main Wykład 15. Programowanie obiektowe z lotu ptaka, str. 3 Czego brakuje strukturom w C Wykład 15. Programowanie obiektowe z lotu ptaka, str. 3 Czego brakuje strukturom w C typedef struct { int licz, mian; } ulamek; Wykład 15. Programowanie obiektowe z lotu ptaka, str. 3 Czego brakuje strukturom w C typedef struct { int licz, mian; void skracanie () { int nwd = najw wsp dz(licz, mian); licz = licz/nwd; mian = mian/nwd; } } ulamek; SKRACANIE UŁAMKÓW Wykład 15. Programowanie obiektowe z lotu ptaka, str. 3 Czego brakuje strukturom w C typedef struct { int licz, mian; void skracanie () { int nwd = najw wsp dz(licz, mian); licz = licz/nwd; mian = mian/nwd; } prywatne int najw wsp dz(int n, int k) { while (n != k) if (n < k) k -= n; else n -= k; return n; } } ulamek; SKRACANIE UŁAMKÓW FUNKCJA POMOCNICZA Wykład 15. Programowanie obiektowe z lotu ptaka, str. 3 Czego brakuje strukturom w C typedef struct { int licz, mian; void skracanie () { int nwd = najw wsp dz(licz, mian); licz = licz/nwd; mian = mian/nwd; } prywatne int najw wsp dz(int n, int k) { while (n != k) if (n < k) k -= n; else n -= k; return n; } } ulamek; ulamek u = {-2, 4}; u.skracanie(); Wykład 15. Programowanie obiektowe z lotu ptaka, str. 3 Czego brakuje strukturom w C typedef struct { int licz, mian; void skracanie () { int nwd = najw wsp dz(licz, mian); licz = licz/nwd; mian = mian/nwd; } prywatne int najw wsp dz(int n, int k) { while (n != k) if (n < k) k -= n; else n -= k; return n; } } ulamek; ulamek u = {-2, 4}; u.skracanie(); W C nie ma możliwości • umieszczenia wewnątrz struktury funkcji obsługującej pola tej struktury Wykład 15. Programowanie obiektowe z lotu ptaka, str. 3 Czego brakuje strukturom w C W C nie ma możliwości • umieszczenia void skracanie () { wewnątrz struktury int nwd = najw wsp dz(licz, mian); funkcji obsługującej licz = licz/nwd; mian = mian/nwd; pola tej struktury; } • ukrycia funkcji prywatne int najw wsp dz(int n, int k) { pomocniczej while (n != k) wewnątrz struktury, if (n < k) k -= n; żeby nie była else n -= k; widoczna poza tą return n; } strukturą. typedef struct { int licz, mian; } ulamek; ulamek u = {-2, 4}; u.skracanie(); Wykład 15. Programowanie obiektowe z lotu ptaka, str. 4 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . Wykład 15. Programowanie obiektowe z lotu ptaka, str. 4 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . W Jawie: • Strukturom odpowiadają klasy (np. klasa Ulamek). Klasa jest złożonym typem danych; może zawierać Wykład 15. Programowanie obiektowe z lotu ptaka, str. 4 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . W Jawie: • Strukturom odpowiadają klasy (np. klasa Ulamek). Klasa jest złożonym typem danych; może zawierać – wartości („własności”) — jak w C (np. licz) Wykład 15. Programowanie obiektowe z lotu ptaka, str. 4 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . W Jawie: • Strukturom odpowiadają klasy (np. klasa Ulamek). Klasa jest złożonym typem danych; może zawierać – wartości („własności”) — jak w C (np. licz); oraz – funkcje („metody ”) — w przeciwieństwie do C (np. skracanie). Wykład 15. Programowanie obiektowe z lotu ptaka, str. 4 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . W Jawie: • Strukturom odpowiadają klasy (np. klasa Ulamek). Klasa jest złożonym typem danych; może zawierać – wartości („własności”) — jak w C (np. licz); 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). Wykład 15. Programowanie obiektowe z lotu ptaka, str. 4 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . W Jawie: • Strukturom odpowiadają klasy (np. klasa Ulamek). Klasa jest złożonym typem danych; może zawierać – wartości („własności”) — jak w C (np. licz); 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). • Po zadeklarowaniu klasy class Nazwa klasy { . . . } możemy w zwykły sposób deklarować zmienne: Nazwa klasy nazwa zmiennej ; Wykład 15. Programowanie obiektowe z lotu ptaka, str. 4 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . W Jawie: • Strukturom odpowiadają klasy (np. klasa Ulamek). Klasa jest złożonym typem danych; może zawierać – wartości („własności”) — jak w C (np. licz); 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). • Po zadeklarowaniu klasy class Nazwa klasy { . . . } 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 15. Programowanie obiektowe z lotu ptaka, str. 5 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . W Jawie: • Jedną (lub więcej) z metod klasy jest zwykle konstruktorem obiektów tej klasy. Ma ona nazwę taką samą jak nazwa klasy i nie jest poprzedzona typem wynikowem (ani void-em) — jej typem wynikowym jest definiowana klasa. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 5 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . W Jawie: • Jedną (lub więcej) z metod klasy jest zwykle konstruktorem obiektów tej klasy. Ma ona nazwę taką samą jak nazwa klasy i nie jest poprzedzona typem wynikowem (ani void-em) — jej typem wynikowym jest definiowana klasa. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 5 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . W Jawie: • Jedną (lub więcej) z metod klasy jest zwykle konstruktorem obiektów tej klasy. Ma ona nazwę taką samą jak nazwa klasy i nie jest poprzedzona typem wynikowem (ani void-em) — jej typem wynikowym jest definiowana klasa. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 5 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . W Jawie: • Jedną (lub więcej) z metod klasy jest zwykle konstruktorem obiektów tej klasy. Ma ona nazwę taką samą jak nazwa klasy i nie jest poprzedzona typem wynikowem (ani void-em) — jej typem wynikowym jest definiowana klasa. • Konstruktor służy do tworzenia i inicjalizowania obiektów klasy. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 5 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . W Jawie: • Jedną (lub więcej) z metod klasy jest zwykle konstruktorem obiektów tej klasy. Ma ona nazwę taką samą jak nazwa klasy i nie jest poprzedzona typem wynikowem (ani void-em) — jej typem wynikowym jest definiowana klasa. • Konstruktor służy do tworzenia i inicjalizowania obiektów klasy. Np. Ulamek ul = new Ulamek(3, 4); Wykład 15. Programowanie obiektowe z lotu ptaka, str. 5 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . W Jawie: • Jedną (lub więcej) z metod klasy jest zwykle konstruktorem obiektów tej klasy. Ma ona nazwę taką samą jak nazwa klasy i nie jest poprzedzona typem wynikowem (ani void-em) — jej typem wynikowym jest definiowana klasa. • Konstruktor służy do tworzenia i inicjalizowania obiektów klasy. Np. Ulamek ul = new Ulamek(3, 4); ul.licz ul.mian Z ...... ul.Ulamek : Z × Z → ........ ............ Ulamek...................... ... ..... Z ✲ ...... ........... ................ ... ul.skracanie .. . . . ............ ........... ❦...... Wykład 15. Programowanie obiektowe z lotu ptaka, str. 6 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . Co z klasy Ulamek widzi program używający jej obiektów? Wykład 15. Programowanie obiektowe z lotu ptaka, str. 6 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . Co z klasy Ulamek widzi program używający jej obiektów? ul.licz ul.mian Z ....... ul.Ulamek : Z × Z → ........ ..... Ulamek............................ ... ..... Z ✲ .. ............. .................. .. ul.skracanie .. . . . ............ ............ ❦...... Wykład 15. Programowanie obiektowe z lotu ptaka, str. 6 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . Co z klasy Ulamek widzi program używający jej obiektów? ul.licz ul.mian Z ...... ul.Ulamek : Z × Z → ........ ..... Ulamek............................ ... .... ✲ Z • całkowity licz — licznik ułamka ... ............. ................. .. ul.skracanie .. . . . ............ ............. ❦..... Wykład 15. Programowanie obiektowe z lotu ptaka, str. 6 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . Co z klasy Ulamek widzi program używający jej obiektów? ul.licz ul.mian Z ...... ul.Ulamek : Z × Z → ........ ..... Ulamek............................ ... .... ✲ Z • całkowity licz — licznik ułamka • całkowity mian — mianownik ułamka ... ............. ................. .. ul.skracanie .. . . . ............ ............. ❦..... Wykład 15. Programowanie obiektowe z lotu ptaka, str. 6 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . Co z klasy Ulamek widzi program używający jej obiektów? ul.licz ul.mian Z ....... ul.Ulamek : Z × Z → ........ ..... Ulamek............................ ... ..... Z ✲ ... ............. ................. .. ul.skracanie .. . . . ............ ............ ❦...... • całkowity licz — licznik ułamka • całkowity mian — mianownik ułamka • konstruktor Ulamek (int ll, int mm) — tworzący ułamek z podanego licznika i mianownika Wykład 15. Programowanie obiektowe z lotu ptaka, str. 6 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . Co z klasy Ulamek widzi program używający jej obiektów? ul.licz ul.mian Z ....... ul.Ulamek : Z × Z → ........ ..... Ulamek............................ ... ..... Z ✲ ... ............. ................. ... ul.skracanie .. . . . ............ ............. ❦..... • całkowity licz — licznik ułamka • całkowity mian — mianownik ułamka • konstruktor Ulamek (int ll, int mm) — tworzący ułamek z podanego licznika i mianownika • metoda skracanie() — upraszczająca ułamek Wykład 15. Programowanie obiektowe z lotu ptaka, str. 6 Jak to samo osiąga się w Jawie — patrz plik Ulamki1.java . Co z klasy Ulamek widzi program używający jej obiektów? ul.licz ul.mian Z ...... ul.Ulamek : Z × Z → ........ ..... Ulamek............................ ... .... Z ✲ ... ............. ................. .. ul.skracanie .. . . . ............ ............ ❦...... • całkowity licz — licznik ułamka • całkowity mian — mianownik ułamka • konstruktor Ulamek (int ll, int mm) — tworzący ułamek z podanego licznika i mianownika • metoda skracanie() — upraszczająca ułamek Metoda najw wsp dz jest prywatna, więc niewidoczna z zewnątrz. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 7 Jak to samo osiąga się w Jawie Różnica między funkcjami w C i metodami w Javie Wykład 15. Programowanie obiektowe z lotu ptaka, str. 7 Jak to samo osiąga się w Jawie Różnica między funkcjami w C i metodami w Javie • Funkcja w C działa na wszystkie wartości tego samego typu. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 7 Jak to samo osiąga się w Jawie Różnica między funkcjami w C i metodami w Javie • Funkcja w C działa na wszystkie wartości tego samego typu. • Metoda w Jawie należy do konkretnego obiektu; metoda innego obiektu tej samej klasy może działać inaczej. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 7 Jak to samo osiąga się w Jawie Różnica między funkcjami w C i metodami w Javie • Funkcja w C działa na wszystkie wartości tego samego typu. • Metoda w Jawie należy do konkretnego obiektu; metoda innego obiektu tej samej klasy może działać inaczej. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 7 Jak to samo osiąga się w Jawie Różnica między funkcjami w C i metodami w Javie • Funkcja w C działa na wszystkie wartości tego samego typu. • 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 Wykład 15. Programowanie obiektowe z lotu ptaka, str. 7 Jak to samo osiąga się w Jawie Różnica między funkcjami w C i metodami w Javie • Funkcja w C działa na wszystkie wartości tego samego typu. • 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. ul.skracanie(); powoduje uproszczenie ulamka ul . Wykład 15. Programowanie obiektowe z lotu ptaka, str. 8 Ułamki, c.d. Program na dodawanie ułamków: — patrz plik Ulamki2.java . Wykład 15. Programowanie obiektowe z lotu ptaka, str. 8 Ułamki, c.d. Program na dodawanie ułamków: — patrz plik Ulamki2.java . • Wyjście: System.out.print( . . . ); Łączenie (konkatenacja) napisów: znak +. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 9 Ułamki, c.d. Program na dodawanie ułamków: — patrz plik Ulamki2.java . • Wejście: Potrzebna jest biblioteka: import java.util.Scanner; Wykład 15. Programowanie obiektowe z lotu ptaka, str. 9 Ułamki, c.d. Program na dodawanie ułamków: — patrz plik Ulamki2.java . • Wejście: Potrzebna jest biblioteka: import java.util.Scanner; Trzeba utworzyć obiekt klasy Scanner : Scanner czytnik = new Scanner(System.in); Wykład 15. Programowanie obiektowe z lotu ptaka, str. 9 Ułamki, c.d. Program na dodawanie ułamków: — patrz plik Ulamki2.java . • Wejście: Potrzebna jest biblioteka: import java.util.Scanner; Trzeba utworzyć obiekt klasy Scanner : Scanner czytnik = new Scanner(System.in); Przeczytanie jednego wiersza z klawiatury: String napis = czytnik.nextLine(); Wykład 15. Programowanie obiektowe z lotu ptaka, str. 9 Ułamki, c.d. Program na dodawanie ułamków: — patrz plik Ulamki2.java . • Wejście: Potrzebna jest biblioteka: import java.util.Scanner; Trzeba utworzyć obiekt klasy Scanner : Scanner czytnik = new Scanner(System.in); Przeczytanie jednego wiersza z klawiatury: String napis = czytnik.nextLine(); • Czytanie liczby z napisu: int liczba = Integer.parseInt(napis); Wykład 15. Programowanie obiektowe z lotu ptaka, str. 9 Ułamki, c.d. Program na dodawanie ułamków: — patrz plik Ulamki2.java . • Wejście: Potrzebna jest biblioteka: import java.util.Scanner; Trzeba utworzyć obiekt klasy Scanner : Scanner czytnik = new Scanner(System.in); Przeczytanie jednego wiersza z klawiatury: String napis = czytnik.nextLine(); • Czytanie liczby z napisu: int liczba = Integer.parseInt(napis); double liczba = Double.parseDouble(napis); Wykład 15. Programowanie obiektowe z lotu ptaka, str. 10 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . Wykład 15. Programowanie obiektowe z lotu ptaka, str. 10 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Komendy if — jak w C for while do...while switch Wykład 15. Programowanie obiektowe z lotu ptaka, str. 10 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Komendy if for while do...while — jak w C • Nowe typy: – String — odpowiada char* z C switch Wykład 15. Programowanie obiektowe z lotu ptaka, str. 10 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Komendy if for while do...while switch — jak w C • Nowe typy: – String — odpowiada char* z C – Boolean — zawiera wartości logiczne true i false mogące występować w warunkach if-ów i while-ów Wykład 15. Programowanie obiektowe z lotu ptaka, str. 10 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Komendy if for while do...while switch — jak w C • Nowe typy: – String — odpowiada char* z C – Boolean — zawiera wartości logiczne true i false mogące występować w warunkach if-ów i while-ów • Nowe typy: klasa ArrayList<. . . > — nieograniczona tablica z operacjami: Wykład 15. Programowanie obiektowe z lotu ptaka, str. 10 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Komendy if for while do...while switch — jak w C • Nowe typy: – String — odpowiada char* z C – Boolean — zawiera wartości logiczne true i false mogące występować w warunkach if-ów i while-ów • Nowe typy: klasa ArrayList<. . . > — nieograniczona tablica z operacjami: – size — liczba elementów listy – get — wybieranie elementu o podanym indeksie – add — dodawanie nowego elementu – remove — usuwanie elementu o podanym indeksie Wykład 15. Programowanie obiektowe z lotu ptaka, str. 11 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Stare typy w nowym opakowaniu Wykład 15. Programowanie obiektowe z lotu ptaka, str. 11 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Stare typy w nowym opakowaniu: – jest int (tylko typ) — ale też nowy Integer (klasa) Wykład 15. Programowanie obiektowe z lotu ptaka, str. 11 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Stare typy w nowym opakowaniu: – jest int (tylko typ) — ale też nowy Integer (klasa) – jest double (tylko typ) — ale też nowy Double (klasa) Wykład 15. Programowanie obiektowe z lotu ptaka, str. 11 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Stare typy w nowym opakowaniu: – jest int (tylko typ) — ale też nowy Integer (klasa) – jest double (tylko typ) — ale też nowy Double (klasa) – jest char (tylko typ) — ale też nowy Character (klasa) Wykład 15. Programowanie obiektowe z lotu ptaka, str. 11 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Stare typy w nowym opakowaniu: – jest int (tylko typ) — ale też nowy Integer (klasa) – jest double (tylko typ) — ale też nowy Double (klasa) – jest char (tylko typ) — ale też nowy Character (klasa) • Stare typy w nowym opakowaniu: – deklaracja tablicy liczb całkowitych: int[ ] tab; — na razie liczba jej elementów jest nieustalona Wykład 15. Programowanie obiektowe z lotu ptaka, str. 11 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Stare typy w nowym opakowaniu: – jest int (tylko typ) — ale też nowy Integer (klasa) – jest double (tylko typ) — ale też nowy Double (klasa) – jest char (tylko typ) — ale też nowy Character (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 Wykład 15. Programowanie obiektowe z lotu ptaka, str. 11 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Stare typy w nowym opakowaniu: – jest int (tylko typ) — ale też nowy Integer (klasa) – jest double (tylko typ) — ale też nowy Double (klasa) – jest char (tylko typ) — ale też nowy Character (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}; Wykład 15. Programowanie obiektowe z lotu ptaka, str. 11 Bardziej skomplikowany program: lista płac — patrz plik Lista plac.java . • Stare typy w nowym opakowaniu: – jest int (tylko typ) — ale też nowy Integer (klasa) – jest double (tylko typ) — ale też nowy Double (klasa) – jest char (tylko typ) — ale też nowy Character (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: tab.length Wykład 15. Programowanie obiektowe z lotu ptaka, str. 12 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . Wykład 15. Programowanie obiektowe z lotu ptaka, str. 12 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . Wykład 15. Programowanie obiektowe z lotu ptaka, str. 12 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . • Każdy owad jest obiektem klasy Robale. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 12 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . • Każdy owad jest obiektem klasy Robale. • Poszczególne owady różnią się kolorem, prędkością biegania i trasą biegania. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 12 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . • 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 zapisana jest wyłącznie w nim samym — tylko sam owad wie, jak powinien się wyświetlać i ruszać. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 12 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . • 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 zapisana jest wyłącznie w nim samym — tylko sam owad wie, jak powinien się wyświetlać i ruszać. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 13 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . Wykład 15. Programowanie obiektowe z lotu ptaka, str. 13 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . • Biblioteki do grafiki: javax.awt.* i javax.swing.* . Wykład 15. Programowanie obiektowe z lotu ptaka, str. 13 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . • Biblioteki do grafiki: javax.awt.* i javax.swing.* . • Biblioteki do reagowania na „wydarzenia” (w tym programie tylko na upływ czasu): javax.awt.event.* . Wykład 15. Programowanie obiektowe z lotu ptaka, str. 13 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . • Biblioteki do grafiki: javax.awt.* i javax.swing.* . • Biblioteki do reagowania na „wydarzenia” (w tym programie tylko na upływ czasu): javax.awt.event.* . • W programie głównym (czyli w metodzie main klasy Main ) ustala się cechy okna i dodaje się do niego obrazek zdefiniowany w innej klasie. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 13 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . • Biblioteki do grafiki: javax.awt.* i javax.swing.* . • Biblioteki do reagowania na „wydarzenia” (w tym programie tylko na upływ czasu): javax.awt.event.* . • W programie głównym (czyli w metodzie main klasy Main ) ustala się cechy okna i dodaje się do niego obrazek zdefiniowany w 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 do animacji) — ma się zmienić stan licznika czasu, owady mają się o niej dowiedzieć, i obrazek ma zostać namalowany na nowo. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 13 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . • Biblioteki do grafiki: javax.awt.* i javax.swing.* . • Biblioteki do reagowania na „wydarzenia” (w tym programie tylko na upływ czasu): javax.awt.event.* . • W programie głównym (czyli w metodzie main klasy Main ) ustala się cechy okna i dodaje się do niego obrazek zdefiniowany w 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 do animacji) — ma się zmienić stan licznika czasu, owady mają się o niej dowiedzieć, i obrazek ma zostać namalowany na nowo. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 13 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . • Biblioteki do grafiki: javax.awt.* i javax.swing.* . • Biblioteki do reagowania na „wydarzenia” (w tym programie tylko na upływ czasu): javax.awt.event.* . • W programie głównym (czyli w metodzie main klasy Main ) ustala się cechy okna i dodaje się do niego obrazek zdefiniowany w 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 do animacji) — ma się zmienić stan licznika czasu, owady mają 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 15. Programowanie obiektowe z lotu ptaka, str. 14 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . Ruch pojedynczego i-tego owada: ri (t) = cos(2π(i + 1)t) , sin(2π(2i + 1)t) Wykład 15. Programowanie obiektowe z lotu ptaka, str. 14 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . Ruch pojedynczego i-tego owada: r i (t) = cos(2π(i + 1)t) , sin(2π(2i + 1)t) więc w trakcie jednego przebiegu parametru t od 0 do 1, owad i-ty przebiega • i + 1 razy od prawej ściany do lewej i z powrotem, • 2i + 1 razy od górnej ściany do dolnej i z powrotem. Wykład 15. Programowanie obiektowe z lotu ptaka, str. 14 Jeszcze bardziej skomplikowany program: robale — patrz plik Robale.java . Ruch pojedynczego i-tego owada: r i (t) = cos(2π(i + 1)t) , sin(2π(2i + 1)t) więc w trakcie jednego przebiegu parametru t od 0 do 1, owad i-ty przebiega • i + 1 razy od prawej ściany do lewej i z powrotem, • 2i + 1 razy od górnej ściany do dolnej i z powrotem. i i + 1 2i + 1 0 1 1 okrąg . ......... 1 2 3 2 3 5 ... ..... ..... ... ... ... .... .. .... ........ .. ... ............... ...